Skip to main content
Glama

Hostkey MCP Server

MCP server for Hostkey (.com portal, InvAPI invapi.hostkey.com). Runs locally over stdio — Cursor, VS Code, and other MCP clients. Hosted remote: https://mcp.hostkey.com/mcp (cloud agents).

Endpoint

https://invapi.hostkey.com (hardcoded)

Auth

HOSTKEY_API_KEY

Tools

132 typed tools + call_api_raw

Gives the model access to your Hostkey account: servers, catalog and ordering, power, OS reinstall, network, DNS, snapshots, IPMI/console, ISO, S3, Remote Hands, billing, and API keys.

1. Get an API key

InvAPI → API keys → create a key.

Prefer a dedicated key for MCP. Per-server keys limit access to one server. DNS writes need the pdns/edit permission.

Related MCP server: hostman-mcp-server

2. Install

Cursor

Install in Cursor

Click the button, replace YOUR_API_KEY with your InvAPI key, then confirm.

Or add to .cursor/mcp.json manually:

{
  "mcpServers": {
    "hostkey-mcp-server": {
      "command": "npx",
      "args": ["-y", "hostkey-mcp-server"],
      "env": {
        "HOSTKEY_API_KEY": "your-api-key"
      }
    }
  }
}

Remote (cloud agents)

No local Node/npx. Point the client at the hosted endpoint and send your InvAPI key:

{
  "mcpServers": {
    "hostkey": {
      "url": "https://mcp.hostkey.com/mcp",
      "headers": {
        "Authorization": "Bearer your-api-key"
      }
    }
  }
}

VS Code

.vscode/mcp.json:

{
  "servers": {
    "hostkey-mcp-server": {
      "command": "npx",
      "args": ["-y", "hostkey-mcp-server"],
      "env": {
        "HOSTKEY_API_KEY": "your-api-key"
      }
    }
  }
}

Optional: HOSTKEY_TOKEN_TTL, HOSTKEY_HTTP_TIMEOUT, HOSTKEY_ALLOW_DESTRUCTIVE (see .env.example).

From source (Node.js ≥ 22.18): npm install && npm run build.

3. Confirming dangerous operations

Every write call needs confirm=true. Without it, nothing changes.

Also:

  • order_server defaults to dry_run — a real order only after explicit consent;

  • OS reinstall, PXE, and service cancellation require HOSTKEY_ALLOW_DESTRUCTIVE=1;

  • passwords and tokens are masked in responses.

Long jobs (deploy, reinstall) return a callback key — poll with check_task.

4. Tools

Groups (full list via tools/list):

Group

Examples

Servers

get_servers, get_server, get_power_status

Catalog

list_presets, list_os, list_traffic_plans

Power & order

power_on, power_off, order_server, reinstall_server

PXE

create_reinstall_task → … → clear_pxe_config

Network / DNS

ports, PTR, zones and records

Snapshots, ISO, S3

VM snapshots, images, buckets

Remote Hands

duty-shift tickets (request_rh_*, rhr_*)

Billing

invoices, payments, contacts

Misc

check_task, call_api_raw

Prompts

Prompt

Purpose

order_server_prompt

guided server order

reinstall_server_prompt

OS reinstall

troubleshoot_server_prompt

diagnostics

Or just ask: “list my servers” / “order a VPS in NL”.

Docs

Available Tools

132 tools
add_contactAInspect

Add an additional contact to the account (whmcs/add_contact). WARNING: the contact is created with a random email — change it in Invapi.

NameRequiredDescriptionDefault
confirmYesMust be true to run the operation.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare the safety profile (not read-only, not destructive, open-world), so the description's job is to add what they don't cover. It does exactly that by disclosing a genuinely non-obvious side effect: the contact is created with a random email and must be corrected in Invapi. Auth/rate-limit details are still absent, so 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.

Conciseness5/5

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

Two sentences, zero filler, with the action stated first and the critical WARNING front-loaded where an agent will not miss it.

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

Completeness4/5

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

For a one-parameter mutation with no output schema, the definition covers what it does, the target system, and the key gotcha. It stops short of explaining which account scope is used or what the call returns, 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.

Parameters3/5

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

There is only one parameter and the schema documents it fully ('Must be true to run the operation'), so the schema carries the load. The description adds no extra meaning about 'confirm', which is the correct baseline when coverage is 100%.

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

Purpose4/5

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

States a specific verb and resource ('Add an additional contact to the account') and even names the underlying endpoint (whmcs/add_contact). The word 'additional' implicitly separates it from update_contact/delete_contact, but 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.

Usage Guidelines2/5

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

The description never says when to reach for this versus update_contact, get_contacts, or delete_contact, nor what prerequisites (a valid account/client) are needed. The only workflow hint is the post-creation fix-up, which is a behavioral caveat rather than usage guidance.

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

add_dns_domainBInspect

Create a DNS zone and add a domain to the domains table (pdns/add_domain). Requires pdns/edit permission.

NameRequiredDescriptionDefault
nameYesDomain name, e.g. example.com
confirmYesMust be true to run the operation.

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true. The description adds a real behavioral fact the annotations omit — the required pdns/edit permission — which is valuable for auth planning. It still omits conflict/duplicate handling and reversibility, but given annotations carry the safety profile, a 3 is appropriate.

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

Conciseness5/5

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

A single tight sentence front-loading the action, with the endpoint and permission requirement as compact trailing clauses. Every phrase earns its place with no filler.

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

Completeness3/5

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

For a create tool with no output schema and annotations covering the mutation profile, the description plus schema are mostly sufficient. The notable gap is the unresolved overlap with the add_dns_zone sibling, which the description does not address.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters ('name' with an example, 'confirm' with its meaning) are fully documented in the schema. The description adds no parameter 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.

Purpose4/5

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

The description names specific verbs and resources ('Create a DNS zone and add a domain to the domains table') plus the underlying endpoint (pdns/add_domain), so the action is unambiguous. However, it fails to differentiate from the sibling add_dns_zone, and by mentioning both 'create a DNS zone' and 'add a domain' it blurs the boundary between the two tools.

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

Usage Guidelines2/5

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

It states a permission prerequisite (pdns/edit) but gives no guidance on when to use this tool versus add_dns_zone/add_dns_subdomain, and no exclusions or context for choosing it. The agent is left 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.

add_dns_recordAInspect

Add or update a DNS record in a zone (pdns/add_dns). Requires pdns/edit permission. For SRV records, fill in proto/priority/weight/port/target. Fields mname/rname are marked required for SOA checks in the docs — fill them in on error.

NameRequiredDescriptionDefault
ttlNoTTL in seconds, defaults to 3600
nameNoRecord name, e.g. www
portNoPort for SRV
typeYesRecord type: A, AAAA, CNAME, MX, TXT, SRV…
zoneYesZone name
mnameNoPrimary NS in the SOA record
protoNoProtocol for SRV, e.g. tcp
rnameNoAdmin email in the SOA record
targetNoTarget domain for SRV
weightNoWeight for SRV
confirmYesMust be true to run the operation.
contentYesRecord value, e.g. 10.56.121.5
old_nameNoPrevious record name — for renaming
priorityNoPriority for SRV/MX
increase_soa_serialNoAuto-increment SOA serial (defaults to true)

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so safety profile is covered. The description adds real behavioral value beyond that: the required pdns/edit permission, the upsert semantics ('add or update'), and error-recovery guidance for SOA. It does omit that confirm must be true to execute, which is a notable guard the agent must know.

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

Conciseness4/5

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

Three compact sentences, front-loaded with purpose then prerequisites then type-specific detail. No filler, though the final 'fill them in on error' clause is slightly cryptic out of context.

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

Completeness4/5

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

For a 15-parameter mutation tool with no output schema, the description covers purpose, auth, and the trickiest record types. It omits mention of the mandatory confirm flag and increase_soa_serial default, but those are documented in the schema, so the gap is minor.

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

Parameters4/5

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 cross-field conditional meaning the schema lacks: it ties proto/priority/weight/port/target together specifically for SRV records and explains the mname/rname practical trigger (SOA check failure). That is genuine guidance beyond the flat per-parameter descriptions.

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

Purpose4/5

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

States a specific verb (add or update) and resource (DNS record in a zone) plus an internal API hint (pdns/add_dns). It clearly contrasts with the delete_dns_record sibling by verb, but never names or distinguishes itself from other write siblings like add_dns_zone or edit_dns_subdomain.

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

Usage Guidelines3/5

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

Gives actionable context: the pdns/edit permission requirement, when to populate SRV fields, and the SOA-fill-on-error tip. However, it never states when to use this tool versus alternatives such as edit_dns_subdomain or delete_dns_record, 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.

add_dns_subdomainAInspect

Add a subdomain to the subdomains table (pdns/add_subdomain). Requires pdns/edit permission.

NameRequiredDescriptionDefault
nameYesSubdomain name
confirmYesMust be true to run the operation.
domain_idYesDomain ID from list_dns_domains
server_idYesServer ID

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful non-annotation context: the required pdns/edit permission and the backing API endpoint. It still does not say what happens on duplicate names or on failure.

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

Conciseness4/5

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

One compact sentence with the action front-loaded and zero filler. The parenthetical endpoint is the only arguably optional element, but it is short and aids traceability.

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

Completeness3/5

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

For a four-required-parameter mutation tool with no output schema, the definition covers the action and the auth requirement but omits edge-case behavior (duplicate subdomain, validation failures) and any note on the confirm flag's meaning beyond what the schema already states.

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

Parameters3/5

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

Schema description coverage is 100%, so all four parameters (name, confirm, domain_id, server_id) are already documented in the schema, including the cross-reference to list_dns_domains. 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.

Purpose4/5

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

States a specific verb and resource ("Add a subdomain") and even names the underlying API operation (pdns/add_subdomain). It is distinguishable from siblings like add_dns_domain, add_dns_zone, and edit_dns_subdomain, though it never explicitly contrasts itself with them.

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

Usage Guidelines3/5

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

Usage is implied by the name and the permission note, but there is no explicit when-to-use guidance, no mention of the edit_dns_subdomain alternative, and no statement of prerequisites beyond the pdns/edit permission requirement.

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

add_dns_zoneBInspect

Create a DNS zone on the authoritative PowerDNS server (pdns/add_zone). Requires pdns/edit permission.

NameRequiredDescriptionDefault
dnsNoSOA parameters for the zone; Hostkey defaults apply if omitted
kindNoZone type, defaults to Master
nameYesZone name, e.g. example.com
dnssecNoEnable DNSSEC (defaults to false)
rrsetsNoUse RRset instead of records (defaults to true)
confirmYesMust be true to run the operation.
mastersNoList of master servers (for Slave)
nameserversNoNS servers for the zone, defaults to ns1.hostkey.com/ns2.hostkey.com

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is covered structurally. The description usefully adds the required pdns/edit permission and the authoritative-server target, but says nothing about idempotency, what happens on a name collision, or whether zone creation is reversible.

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

Conciseness5/5

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

Two compact sentences, action first, permission second, with zero filler or restated field lists.

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

Completeness3/5

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

For an 8-parameter, one-nested-object mutation with no output schema, the description covers action, target, and permission but omits conflict/failure behavior and any hint of when this is the right choice. Adequate but with clear gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so the nested SOA object, kind enum, dnssec/rrsets defaults, and the mandatory confirm flag are all documented in the schema itself. The description adds no parameter-level meaning beyond that, making 3 the correct baseline.

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

Purpose4/5

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

States a specific verb+resource ("Create a DNS zone") and names the underlying target (authoritative PowerDNS server / pdns/add_zone), which is concrete enough to act on. It does not, however, differentiate itself from the sibling add_dns_domain, which an agent could easily confuse with this tool.

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

Usage Guidelines2/5

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

The only guidance given is the required permission (pdns/edit). There is no statement of when to prefer this tool over add_dns_domain or add_dns_subdomain, nor any prerequisite or conflict conditions.

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

add_ipmi_userBInspect

Create a temporary IPMI user for web access to IPMI (eq/add_ipmi_user).

NameRequiredDescriptionDefault
idYesServer ID
confirmYesMust be true to run the operation.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds one useful behavioral fact, that the created user is 'temporary', but says nothing about credential lifetime, permissions granted, or the need to clean up with remove_ipmi_user.

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

Conciseness4/5

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

A single compact sentence that front-loads the action and resource before the trailing parenthetical. The '(eq/add_ipmi_user)' endpoint note is minor internal noise but the structure is otherwise tight and efficient.

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

Completeness3/5

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

Adequate for a 2-parameter mutation whose annotations carry the safety profile, but it omits the lifecycle context an agent would want: how the temporary credential is returned or used, and that remove_ipmi_user is the corresponding cleanup. Nothing misleading, just incomplete.

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

Parameters3/5

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

Both parameters are fully documented in the schema (id = Server ID, confirm = must be true), giving 100% coverage, so the baseline is 3. The description adds no additional meaning such as credential naming or implications of the confirm flag.

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

Purpose4/5

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 IPMI user') and clarifies its purpose ('for web access to IPMI'). It does not, however, differentiate itself from sibling tools like request_rh_kvm or remove_ipmi_user, 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.

Usage Guidelines3/5

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

The phrase 'for web access to IPMI' implies when the tool is relevant, but there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives such as request_rh_kvm or the paired remove_ipmi_user cleanup path. 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.

add_iso_imageAInspect

Add a new ISO image or update an existing one by name (iso/add). Requires special 'add' permission.

NameRequiredDescriptionDefault
urlNoImage URL, if required
nameYesImage name
confirmYesMust be true to run the operation.

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=true, so the safety profile is largely covered. The description adds the specific permission requirement, which is real behavioral value, but does not explain what happens on the update path (overwrite vs merge) for an upsert-style operation.

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

Conciseness4/5

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

A single compact sentence with the operation front-loaded and the permission caveat trailing. No filler; appropriately sized for the tool's simplicity.

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

Completeness4/5

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

With annotations carrying the safety hints, three fully documented params, and no output schema to explain, the description covers the essentials including the auth requirement. The remaining gap is disambiguation from upload_iso.

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

Parameters3/5

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 url, name, and confirm, including that confirm must be true. 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.

Purpose4/5

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

States a specific verb+resource ('Add a new ISO image or update an existing one by name') and even cites the underlying endpoint (iso/add), so the agent knows exactly what it does. It does not, however, differentiate itself from close siblings like upload_iso or mount_iso, which could confuse selection.

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

Usage Guidelines3/5

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

The description supplies a prerequisite ('Requires special add permission'), which is useful context. But it gives no guidance on when to choose this over upload_iso or delete_iso_image, so usage 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.

add_rhr_commentBInspect

Add a client-visible message to the request history (rhr/chat).

NameRequiredDescriptionDefault
idYesRequest ID from list_rhr_requests
confirmYesMust be true to run the operation.
messageYesMessage text

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the write/safety profile is largely covered. The description adds genuinely useful context with 'client-visible', flagging that the message is exposed to the client rather than internal-only. It does not explain the confirm requirement or any visibility/permission nuances.

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

Conciseness4/5

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

A single tight sentence with the action front-loaded and no filler. Appropriately sized for the tool's simplicity, though it could have used one more clause to cover the confirm gate.

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

Completeness3/5

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

For a simple 3-parameter write tool with full schema coverage, no output schema, and annotations covering the safety profile, the core information is present. It is adequate but thin: it omits the confirm prerequisite behavior and any relationship to the other RHR tools, which would help an agent route correctly.

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

Parameters3/5

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 id, message, and confirm, including that confirm must be true. The description adds only the 'client-visible' qualifier for the message, which is the correct baseline-3 situation where the schema does the heavy lifting.

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

Purpose4/5

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

The description states a specific verb (Add) and resource (a client-visible message to the request history/chat), which is far more informative than the name alone. The 'rhr/chat' parenthetical ties it to the RHR family. It stops short of explicitly distinguishing it from siblings like create_rhr_request or discard_rhr_request.

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

Usage Guidelines2/5

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

No guidance on when to use this versus the related RHR tools (list_rhr_requests, create_rhr_request, discard_rhr_request), nor any prerequisites. The reader must infer usage entirely from the one-line purpose.

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

add_static_natAInspect

Create a static DNAT to the server IPMI (nat/add_static_nat): public IP for classic IPMI access. Distinct from Secure IPMI Proxy in the panel — Proxy Active alone may not satisfy this call. Async; track with check_task. On server_ipmi_acl_required pass ip_acl.

NameRequiredDescriptionDefault
idYesServer ID
ttlNoNAT lifetime in seconds, if supported
ip_aclNoClient IP(s) allowed to reach IPMI via NAT (InvAPI ip_acl). Required by some accounts when panel Proxy ACL is not enough.
confirmYesMust be true to run the operation.
securedNoSecured NAT flag if supported by InvAPI

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare that this is a non-read-only, non-destructive, open-world operation. The description adds useful behavioral context beyond annotations: the call is asynchronous and should be tracked with `check_task`, and `ip_acl` may be required by some accounts. It does not describe duplicate-NAT behavior, permissions, or side effects in detail, but the annotation coverage lowers the burden.

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

Conciseness5/5

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

The description is front-loaded with the core action and resource, then adds only operationally relevant clauses: endpoint, distinction from Secure IPMI Proxy, async tracking, and ACL handling. There is no filler, and each clause contributes to correct tool selection or invocation.

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

Completeness5/5

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

For a mutation tool with no output schema, the description covers the essential context: what it creates, why it is needed versus proxy access, that it is asynchronous, how to track it via `check_task`, and when to supply `ip_acl`. The remaining parameter details are fully covered by the schema and annotations.

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

Parameters4/5

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

Schema coverage is 100%, so all five parameters are already documented, establishing a baseline of 3. The description adds meaningful conditional semantics for `ip_acl` by saying to pass it when `server_ipmi_acl_required` occurs, which goes beyond the schema's generic parameter description.

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

Purpose5/5

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

The description states a specific verb and resource: create a static DNAT for server IPMI, with the underlying endpoint `nat/add_static_nat`. It also clarifies the use case as public IP for classic IPMI access and distinguishes it from the Secure IPMI Proxy feature, so 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.

Usage Guidelines4/5

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

The description gives a clear usage condition: it is for classic IPMI access via public IP, and Proxy Active alone may not satisfy the call. It also tells the caller to pass `ip_acl` when `server_ipmi_acl_required` occurs. It does not explicitly name sibling alternatives such as `clear_static_nat`, `remove_static_nat`, or `drop_nat`, so it falls short of full when/when-not/alternative guidance.

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

apply_creditAInspect

Pay an invoice in full or in part from the credit balance (whmcs/apply_credit). MONEY: deducts funds from the account.

NameRequiredDescriptionDefault
amountYesPayment amount in account currency
confirmYesMust be true to run the operation.
invoice_idYesInvoice number

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and openWorldHint=true, so the write nature is covered. The description adds meaningful context by warning 'MONEY: deducts funds from the account' and noting partial payments, though it omits prerequisites such as sufficient credit or irreversibility.

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

Conciseness5/5

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

Two short sentences, front-loaded with the action and resource, followed by a compact financial warning. The parenthetical API path is minor but harmless, and every sentence adds value.

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

Completeness3/5

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

For a simple financial write tool with full schema coverage and annotations covering the read/write boundary, the description is adequate but incomplete. It does not address prerequisites (e.g., sufficient credit balance), error behavior, or when to choose this over sibling payment tools like mass_pay.

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

Parameters3/5

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. The phrase 'in full or in part' adds a small amount of meaning to the amount parameter by clarifying partial payments are allowed, but it provides no syntax or additional parameter-level detail beyond the schema.

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

Purpose4/5

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

The description states a specific verb ('Pay'), resource ('invoice'), scope ('in full or in part'), and funding source ('credit balance'). It is clear enough to distinguish from payment-gateway siblings, but it does not explicitly name alternatives such as mass_pay or create_addfunds_invoice, so it falls 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.

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance, nor any mention of alternative tools. The purpose implies the tool is for paying an invoice from credit, but that is tautological rather than actionable routing advice.

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

block_ipBInspect

Block an IP address on the server at the Hostkey network level (net/block_ip). Useful for abuse requests.

NameRequiredDescriptionDefault
idYesServer ID
ipYesIP address
confirmYesMust be true to run the operation.
four_hoursNotrue — block is automatically lifted after 4 hours
descriptionYesBlock reason

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is partly covered. The description adds the network-level scope and abuse-request framing, but says nothing about reversibility (the four_hours auto-lift and unblock_ip are left undisclosed) or permission requirements. With annotations doing part of the work, this is adequate but not rich.

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

Conciseness4/5

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

A single tight sentence with the core action front-loaded, plus a short 'useful for' clause. Nothing is wasted, though the parenthetical API path is marginal detail.

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

Completeness3/5

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

For a simple, fully-schema-documented mutation with no output schema, the description covers the core action and safety is partly carried by annotations. However it omits how the block is reversed (four_hours expiry / unblock_ip) and any permission or side-effect context, leaving meaningful gaps for a state-changing operation.

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

Parameters3/5

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

Schema description coverage is 100% and all five parameters (id, ip, description, confirm, four_hours) are documented in the schema itself. The description adds no parameter-level meaning such as the effect of four_hours or the confirm gate, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb+resource ('Block an IP address on the server') and adds the network layer ('Hostkey network level'), so the operation is unambiguous. It does not explicitly contrast itself with the sibling unblock_ip, so an agent has to infer the pairing rather than being routed to it.

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

Usage Guidelines3/5

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

'Useful for abuse requests' gives an implied context for when the tool applies, but does not name unblock_ip as the inverse operation, nor state any exclusions or prerequisites (e.g. needing the server id and a reason). 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.

call_api_rawA
Destructive
Inspect

Universal direct InvAPI call by resource and action, for resources without typed tools (e.g.: iso — ISO image library, s3 — S3 Object Storage, rhr — Remote Hands new version; see action list in the docs: https://hostkey.com/documentation/apidocs/). ALWAYS requires confirm=true; destructive/paid actions additionally require HOSTKEY_ALLOW_DESTRUCTIVE=1. Prefer typed tools when they exist for the needed operation.

NameRequiredDescriptionDefault
authNoInject session token (defaults to true)
actionYesResource action, e.g.: list
paramsNoCall parameters as an object; nested objects become params[...]
confirmYesRequired confirmation. Without confirm=true the call is rejected.
resourceYesInvAPI resource without .php, e.g.: iso, s3, rhr, eq, net, whmcs

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and openWorldHint=true, but the description adds non-obvious gating context: confirm=true is ALWAYS required and destructive/paid actions additionally need HOSTKEY_ALLOW_DESTRUCTIVE=1. That is real auth/prerequisite disclosure beyond the annotations, though it does not describe response/error behavior for this raw passthrough call.

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

Conciseness4/5

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

A single dense but well-ordered block: purpose first, examples second, hard requirements third, routing rule last. Every clause earns its place, though the run-on examples-plus-URL sentence is slightly heavy.

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

Completeness4/5

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

For a universal passthrough tool with no output schema, the description covers scope, mandatory confirmation, the destructive env-var gate, and alternative routing, which is most of what an agent needs. It does not characterize the shape of returned data or failure modes, a minor gap for an openWorld raw call.

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

Parameters3/5

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

Schema description coverage is 100% and each of the 5 parameters is documented there, including the confirm gate and the nested-object params convention. The description adds resource examples (iso, s3, rhr) and a docs pointer for the action vocabulary, but nothing the schema does not already cover, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Universal direct InvAPI call by resource and action') and immediately scopes it to 'resources without typed tools', naming concrete examples (iso, s3, rhr). An agent can distinguish this generic escape-hatch tool from the many typed 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.

Usage Guidelines5/5

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

Explicitly says when to use it (resources lacking typed tools) and when not ('Prefer typed tools when they exist for the needed operation'), plus routes to the docs for the action list. This is exactly the when/when-not/alternative guidance the dimension asks for.

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

check_taskA
Read-only
Inspect

Check async job status by callback key (eq_callback/check). Many InvAPI operations (power on/off, order, reinstall, snapshots) return {"result":"OK","callback":""}. Pass that key here: result="Not ready" — still running; result="OK" — finished (key then expires). Server deploy can take 10–30 minutes. If the client sent progressToken, emits notifications/progress.

NameRequiredDescriptionDefault
keyYesCallback key from an async operation response

TDQS

A4.7/5.0
Behavior5/5

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

Adds substantial context beyond the readOnly/openWorld annotations: how to interpret result values ('Not ready' vs 'OK'), that the key expires after completion, that deploys can take 10-30 minutes, and that progress notifications are emitted when a progressToken was supplied. This is exactly the lifecycle/timing 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.

Conciseness5/5

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

Front-loads the core action, then packs interpretation, timing, and notification behavior into a few dense clauses. Every sentence carries usable operational information with no filler.

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

Completeness5/5

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

With no output schema and no annotations covering return values, the description takes on the full burden and delivers: result semantics, key expiry, and expected latency. Nothing an agent needs to poll and reason about completion is missing.

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

Parameters4/5

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 goes further by explaining the parameter's origin (the key from a prior async response) and its lifecycle (the key expires once the result is 'OK'). It stops short of adding format details, 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.

Purpose5/5

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

States a specific verb (Check) and resource (async job status) and names the exact mechanism (eq_callback/check) with the callback key. No sibling tool does this, so it is unambiguous even within a large tool set.

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

Usage Guidelines4/5

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

Clearly states when to use it: operations that return {"result":"OK","callback":"<key>"}, enumerating concrete examples (power on/off, order, reinstall, snapshots). It does not state when NOT to use it or name a polling alternative, so it falls 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.

clear_pxe_configA
Destructive
Inspect

PXE reinstall step 7: remove the PXE config (eq/clear_pxe). REQUIRED after completion — otherwise an unexpected reinstall may occur on the next reboot.

NameRequiredDescriptionDefault
idYesServer ID
confirmYesMust be true to run the operation.
hostnameYesServer hostname

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and openWorldHint=true, so the mutation profile is known. The description adds genuinely non-obvious behavior beyond that: skipping this step causes an unexpected reinstall on the next reboot, which is exactly the kind of consequence an agent cannot infer 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.

Conciseness4/5

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

A single dense sentence that front-loads the workflow position, then the action, then the consequence of omission — front-loaded and mostly waste-free. The terse 'step 7' and endpoint parenthetical are compact rather than padded.

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

Completeness4/5

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

For a 3-param mutation tool with no output schema, it covers purpose, workflow ordering, and failure consequence, which is nearly everything an agent needs. Minor gaps (behavior if the config is already absent, why confirm plus id plus hostname are all required) remain.

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

Parameters3/5

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

Schema description coverage is 100% (id, hostname, confirm are all documented, including 'Must be true to run the operation'). The description adds no parameter-level detail, so this 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.

Purpose5/5

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

States a specific verb and resource (remove the PXE config), names the underlying endpoint (eq/clear_pxe), and locates the tool as step 7 of the PXE reinstall workflow. An agent can immediately distinguish it from the sibling create_pxe_config.

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

Usage Guidelines4/5

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

Explicitly says when to call it ('REQUIRED after completion') and ties it to a concrete sequence position (step 7), which is strong context. It does not name a when-not condition or point at an alternative tool, so it falls 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.

clear_static_natBInspect

Remove stale static NAT forwarding rules by internal IP (nat/clear_static_nat).

NameRequiredDescriptionDefault
ipYesInternal IP address
confirmYesMust be true to run the operation.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and openWorldHint=true, so the agent knows this mutates remote state; the description adds the useful scoping detail that removal is keyed by internal IP (i.e., potentially all rules for that IP), which goes beyond the annotations. It stops short of stating whether the operation is irreversible, idempotent, or requires elevated auth, and destructiveHint=false sits somewhat awkwardly with a verb like "Remove".

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

Conciseness4/5

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

A single front-loaded sentence with no filler. The trailing parenthetical "(nat/clear_static_nat)" merely restates the tool name/endpoint and earns little, keeping it just short of a 5.

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

Completeness3/5

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

There is no output schema, so return values need not be explained, and annotations carry the safety profile. Still, for a state-mutating removal keyed by IP, the description leaves unclear whether one rule or all matching rules are deleted and what failure looks like, which is a real gap for an agent deciding to call it.

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

Parameters3/5

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

Schema description coverage is 100%, so both `ip` and `confirm` are already documented; baseline is 3. The phrase "by internal IP" adds modest value by clarifying that the IP is the selector for which rules are cleared, but the description adds nothing about the mandatory `confirm` flag or the address format.

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

Purpose4/5

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

Clear verb+resource+scoping: "Remove ... static NAT forwarding rules by internal IP". An agent knows exactly what is affected and how it is keyed. However, it does not distinguish itself from the near-identical sibling remove_static_nat (or drop_nat), so the selection decision is left ambiguous.

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

Usage Guidelines2/5

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

The word "stale" hints at the intended scenario (cleaning up obsolete rules), which is a weak implied usage signal. There is no explicit when-to-use, no when-not-to-use, and no routing to remove_static_nat or drop_nat, which is exactly what this tool's closest siblings would require.

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

create_addfunds_invoiceBInspect

Create an invoice to top up the credit balance (whmcs/create_addfunds). MONEY: creates a real invoice for the given amount.

NameRequiredDescriptionDefault
amountYesTop-up amount in account currency
confirmYesMust be true to run the operation.

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety posture is largely covered. The description does add real value beyond them by flagging that this creates an actual monetary invoice; however it stops short of saying whether funds are captured immediately, whether it is reversible, or what the confirm flag protects against beyond the schema's own text.

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

Conciseness4/5

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

Two tight sentences with no filler, and the key impact signal ('MONEY') is front-loaded. The parenthetical API path is arguably internal plumbing, but it is short and harmless.

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

Completeness3/5

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

For a money-moving mutation with no output schema, the description plus annotations cover the essentials: it writes, it's not read-only, it touches the open world, it creates a real invoice, and confirm must be true. It still leaves the agent guessing about downstream effects (payment capture, whether the invoice must be paid separately) and offers no routing hint to the sibling billing tools.

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

Parameters3/5

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

Schema description coverage is 100% (amount is 'Top-up amount in account currency', confirm is 'Must be true to run the operation'), so the schema carries the parameter burden. The description only restates 'for the given amount' and adds no unit, currency, or range detail beyond the schema.

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

Purpose4/5

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

States a specific verb and resource ('Create an invoice to top up the credit balance') and even names the backing API operation (whmcs/create_addfunds), so the agent knows exactly what it does. It does not, however, differentiate itself from the many nearby billing siblings like apply_credit or generate_due_invoice, which is where confusion is most likely.

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance, and no reference to alternatives such as apply_credit or mass_pay that also affect a client's balance. 'MONEY: creates a real invoice for the given amount' is a warning about impact, not a usage rule for choosing this tool.

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

create_api_keyAInspect

Create a new API key for the account or a specific server (api_keys/add). The key value is shown once in the response — save it.

NameRequiredDescriptionDefault
ipNoIP allowlist, e.g. 10.0.0.2, 10.4.6.3/24
nameYesKey name
activeYestrue — key is active
confirmYesMust be true to run the operation.
server_idNoServer ID; omit for an account-wide key
login_notify_methodYesLogin notifications for this key; use none for per-server keys
login_notify_addressNoEmail or webhook URL for notifications

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the write/non-destructive profile is covered structurally. The description adds genuinely new behavioral context beyond annotations: the key value is returned only once and must be saved. It does not mention permission requirements or whether the operation is reversible.

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

Conciseness5/5

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

Two tight sentences with zero filler; the core action is front-loaded and the one critical caveat (save the key) follows immediately. Every clause earns its place.

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

Completeness4/5

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 the one non-obvious return detail (one-time key value). It is missing only peripheral context such as authentication/permission prerequisites for a mutating tool, but overall it is sufficient to invoke correctly.

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

Parameters3/5

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

Schema description coverage is 100% (7 params, 4 required, enum documented), so the schema already carries parameter meaning and the baseline is 3. The description's scope statement loosely maps to the optional server_id but adds no syntax or formatting detail beyond what the schema provides.

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

Purpose4/5

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

Names a specific verb+resource ('Create a new API key') and adds scope disambiguation ('for the account or a specific server') plus the underlying endpoint (api_keys/add). It does not explicitly contrast with siblings like update_api_key or get_api_key, so it falls short of the top band, but an agent knows exactly 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.

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance relative to alternatives (update_api_key, list_api_keys, list_server_api_keys). The account-vs-server scope is implied but the agent must infer when this tool is the right choice versus other key-management tools.

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

create_pxe_configA
Destructive
Inspect

PXE reinstall step 2: create a PXE config for OS install (eq/create_pxe). DESTRUCTIVE.

NameRequiredDescriptionDefault
idYesServer ID
os_idYesOS ID from list_os
confirmYesMust be true to run the operation.
ssh_keyNoPublic SSH key
hostnameYesHostname
root_passYesRoot password (min. 8 chars, uppercase letter, digit)
reinstall_keyNoMaster key from create_reinstall_task
post_install_scriptNoPost-install script
post_install_callbackNoCallback URL after install

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the one-word 'DESTRUCTIVE' adds nothing beyond structured data. The description does supply workflow sequencing (step 2) and the upstream API op (eq/create_pxe), but omits what actually gets destroyed (existing OS/data), the confirm=true gate, and any prerequisite ordering — gaps that matter for an irreversible reinstall.

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

Conciseness5/5

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

Two compact clauses with the workflow position front-loaded and the API endpoint in parentheses. No filler; every fragment carries information.

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

Completeness3/5

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

For a 9-parameter, 5-required destructive mutation with no output schema, the description is thin: it never states that create_reinstall_task must run first to yield reinstall_key, nor that confirm must be true. The annotations cover the safety profile, but the sequencing prerequisite an agent needs to call this correctly is only half-stated.

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

Parameters3/5

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

Schema description coverage is 100% across all 9 parameters, so the schema already documents every field including confirm and reinstall_key semantics. The description adds no parameter-level detail, which is the correct 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.

Purpose4/5

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 PXE config for OS install') and pins its position in a workflow ('PXE reinstall step 2'), which separates it from siblings like clear_pxe_config and create_reinstall_task. It stops short of explicitly stating which sibling precedes it, so the distinction is implied rather than named.

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

Usage Guidelines3/5

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

'PXE reinstall step 2' implies this must follow an earlier step, which is useful ordering context, but no alternative tool is named and no when-not condition is given. An agent must infer that create_reinstall_task produces the reinstall_key this tool expects.

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

create_reinstall_taskA
Destructive
Inspect

PXE reinstall step 1: create an OS reinstall master key (eq/reinstall). Returns reinstall_key used by check_task to track install stages. DESTRUCTIVE: part of the process that wipes server disks.

NameRequiredDescriptionDefault
idYesServer ID
confirmYesMust be true to run the operation.

TDQS

A4.2/5.0
Behavior4/5

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 structurally; the description adds concrete value by specifying WHAT is destroyed ('wipes server disks') and by naming the returned reinstall_key. It still omits auth/permission requirements and whether the destruction is immediate or deferred to a later step, 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.

Conciseness5/5

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

Three tight sentences, front-loaded with purpose then the return value then the danger warning. Every sentence carries information an agent needs; there is no filler.

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

Completeness4/5

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 return value (reinstall_key), the destructive consequence, and the link to check_task. It leaves the surrounding reinstall workflow (relationship to create_pxe_config / reinstall_server, and whether the wipe happens here or later) implicit, so an agent may need to infer sequencing.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters (id, confirm) are documented in the schema, including that confirm must be true. The description adds nothing about parameter meaning or valid values, so this is the baseline case where the schema does all the work.

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

Purpose5/5

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

States a specific verb+resource ('create an OS reinstall master key (eq/reinstall)') and positions it as step 1 of a named flow, plus names the downstream sibling check_task that consumes its output. An agent can distinguish it from reinstall_server or create_pxe_config from the description alone.

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

Usage Guidelines4/5

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

Gives clear context for when to use it ('PXE reinstall step 1', output feeds check_task to track stages), which is real sequencing guidance. It stops short of naming an alternative or an exclusion (e.g. when to prefer reinstall_server or create_pxe_config instead), so it does not reach the explicit when/when-not bar.

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

create_rhr_requestAInspect

Create a Remote Hands request (rhr/add): on-site datacenter shift work that cannot be done remotely. Describe the work in as much detail as possible in comment. Use only if the remote server management module is unavailable/not working.

NameRequiredDescriptionDefault
idYesServer ID
commentYesDetailed description of the required work
confirmYesMust be true to run the operation.
request_typeNoWork type, if set by a directory

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds that this escalates to on-site humans performing physical datacenter work, which is useful context beyond the annotations, but says nothing about approval flow, cost, expected turnaround, or what happens after submission.

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

Conciseness5/5

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

Two tightly written sentences with zero filler; the core action is front-loaded and the usage restriction follows immediately. Nothing could be cut without losing information.

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

Completeness4/5

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

For a mutation tool with annotations covering safety, full schema coverage and no output schema, the description supplies purpose, usage restriction and the critical comment-detail expectation. It omits the request lifecycle (approval, scheduling, notification) that would make it fully self-contained.

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

Parameters3/5

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

Schema description coverage is 100% and all four parameters are documented in the schema, so the baseline is 3. The description's only param-level contribution is reinforcing that comment should be 'as much detail as possible', which largely restates the schema's 'Detailed description of the required work'.

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

Purpose5/5

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

States a specific verb+resource ('Create a Remote Hands request (rhr/add)') and immediately qualifies the resource ('on-site datacenter shift work that cannot be done remotely'), which distinguishes it from request_rh_* remote power/KVM helpers and from list_rhr_requests/add_rhr_comment/discard_rhr_request. An agent can identify the tool's niche 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.

Usage Guidelines4/5

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

Gives an explicit exclusion: 'Use only if the remote server management module is unavailable/not working.' That is a real when-not condition that steers the agent away from misuse. It does not, however, name the specific alternative sibling (e.g. reboot_server, request_rh_power_on) to use first, so routing is left partly to inference.

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

create_snapshotAInspect

Create a virtual machine snapshot (vm/create_snapshot). Async operation. Track with check_task.

NameRequiredDescriptionDefault
idYesVirtual machine ID
nameYesSnapshot name
confirmYesMust be true to run the operation.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), and the description adds the crucial behavioral fact that this is asynchronous and must be tracked via check_task — information annotations cannot convey. It stops short of describing timing, failure modes, or what happens to existing snapshots.

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

Conciseness5/5

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

Three short sentences, front-loaded with the action, then the async nature, then the tracking tool. Nothing is padded and every clause carries information.

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

Completeness4/5

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

For a 3-parameter mutation tool with no output schema, the description supplies the essentials: what it does, that it is async, and how to poll it. Only minor gaps remain, such as state prerequisites or behavior on an already-snapshotted VM.

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

Parameters3/5

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

Schema description coverage is 100%, so id, name, and confirm are all documented in the schema itself. The description adds no parameter-level meaning (e.g. naming rules or what confirm guards against), so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Create a virtual machine snapshot') and even names the underlying endpoint (vm/create_snapshot). This clearly distinguishes it from sibling snapshot tools like get_snapshots, remove_snapshot, and restore_snapshot.

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

Usage Guidelines4/5

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

Tells the agent the operation is async and explicitly routes follow-up polling to check_task, which is real usage guidance. It does not, however, state any prerequisites or when-not-to-use conditions (e.g. snapshot limits, VM state requirements).

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

delete_api_keyA
Destructive
Inspect

Delete an API key (api_keys/delete). DESTRUCTIVE: apps using the key will lose access.

NameRequiredDescriptionDefault
idYesKey ID
confirmYesMust be true to run the operation.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, so the safety bar is lower. The description adds genuine context beyond the annotation by naming the consequence: apps using the key will lose access. It still doesn't state irreversibility or required authorization level.

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

Conciseness5/5

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

Two short sentences, zero filler, with the destructive consequence front-loaded right after the action. Every clause earns its place.

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

Completeness4/5

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

Annotations carry the safety profile, the schema fully documents both parameters, and no output schema is needed for a deletion. The description adds the downstream consequence, making it nearly complete for a simple two-param destructive call.

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

Parameters3/5

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

Schema description coverage is 100%, so both id and confirm are already documented in the schema. The description adds no meaning beyond that (e.g. where to find the key id), so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (Delete) and resource (API key), plus the underlying endpoint api_keys/delete. It clearly separates itself from create_api_key/update_api_key/list_api_keys by naming the action, though it doesn't explicitly position itself against those siblings.

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

Usage Guidelines3/5

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 guidance is given. The destructive warning implies caution, but it never says when deletion is appropriate versus rotating (update_api_key) or revoking via another path – usage 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_cancellation_requestCInspect

Withdraw a service cancellation request (whmcs/delete_cancellation_request).

NameRequiredDescriptionDefault
idYesServer ID
confirmYesMust be true to run the operation.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, covering the safety profile. The description adds nothing beyond the annotations – no auth requirements, no side-effect detail, no explanation that withdrawal cancels an existing request and requires confirmation.

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

Conciseness4/5

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

A single front-loaded sentence with no wasted prose. The parenthetical API path is minor noise but harmless, and the core meaning is delivered immediately.

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

Completeness3/5

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

For a simple two-parameter mutation tool with full schema coverage and annotations, the description is minimally viable. It omits behavioral context (confirm requirement, effect on the underlying cancellation) but the structured fields carry most of the load.

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

Parameters3/5

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 confirm) are fully documented in the schema, justifying the baseline 3. The description adds no meaning beyond the schema, though none is needed.

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

Purpose4/5

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

The description states a specific verb ("withdraw") and resource ("service cancellation request"), which lets an agent distinguish it from request_cancellation and get_cancellation_requests. It does not explicitly name those siblings, but the verb+resource pair is unambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus request_cancellation, get_cancellation_requests, or discard_rhr_request, and no mention of prerequisites such as the confirm flag. The agent must 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.

delete_contactC
Destructive
Inspect

Delete an additional account contact (whmcs/delete_contact). DESTRUCTIVE.

NameRequiredDescriptionDefault
confirmYesMust be true to run the operation.
contact_idYesContact ID

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so the trailing 'DESTRUCTIVE.' merely restates what structured data provides and adds no new context. The description says nothing about irreversibility, cascade effects on linked records, or permission requirements, so it contributes no value 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.

Conciseness4/5

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

Two short, front-loaded sentences with no filler. It is efficient, though arguably under-specified rather than truly concise, which keeps it off a 5.

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

Completeness3/5

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

For a two-parameter destructive tool with full schema coverage and annotations covering the safety profile, the description is minimally adequate. It omits what deletion does to dependent data and any alternative-path guidance, leaving real gaps for a destructive operation.

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

Parameters3/5

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

Schema description coverage is 100% with both contact_id and confirm fully documented, so the schema carries the parameter burden and baseline 3 applies. The description adds no format hints (e.g., where to obtain a contact ID) or semantics beyond what the schema states.

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

Purpose4/5

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

States a specific verb and resource ('Delete an additional account contact') and even cites the underlying API operation (whmcs/delete_contact). The word 'additional' usefully distinguishes this from deleting the primary client record, though it does not name sibling tools like add_contact or update_contact explicitly.

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

Usage Guidelines2/5

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

No guidance on when to use this versus update_contact, get_contacts, or other contact-management siblings, and no prerequisites or caveats are stated. The only implicit condition is the 'confirm' flag, which is already documented in the schema, not the description.

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

delete_dns_domainA
Destructive
Inspect

Delete a domain by ID: DNS zone, the domain itself, and all its subdomains (pdns/delete_domain). DESTRUCTIVE. Requires pdns/edit permission.

NameRequiredDescriptionDefault
confirmYesMust be true to run the operation.
domain_idYesDomain ID from list_dns_domains
server_idYesServer ID

TDQS

A4.3/5.0
Behavior4/5

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 covered. The description adds real value beyond that: it discloses the exact blast radius (zone + domain + subdomains) and the pdns/edit authorization requirement, neither of which appears in 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.

Conciseness5/5

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

Three tight sentences, front-loaded with the action and scope, then the destructive warning and permission requirement. Every clause earns its place, with no filler.

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

Completeness5/5

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

For a destructive mutation with no output schema, the description covers what an agent needs: scope of deletion, the destructive flag, and the required permission. Nothing material is left unstated.

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

Parameters3/5

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

Schema coverage is 100%, with domain_id, server_id, and confirm each documented in the schema. The description only adds 'by ID', which the schema already conveys. 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.

Purpose5/5

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

States a specific verb (Delete), resource (a domain), and precisely enumerates blast radius: the DNS zone, the domain itself, and all subdomains. This distinguishes it from siblings like delete_dns_subdomain and delete_dns_zone without needing to open schemas.

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

Usage Guidelines4/5

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

Makes the destructive nature explicit and names the required permission (pdns/edit), which is genuine precondition guidance. It does not explicitly state when to choose this over delete_dns_subdomain or delete_dns_zone, though the enumerated scope implies the distinction.

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

delete_dns_recordA
Destructive
Inspect

Delete a DNS record from a zone (pdns/delete_dns). DESTRUCTIVE. Requires pdns/edit permission.

NameRequiredDescriptionDefault
nameYesRecord name
typeYesRecord type
zoneYesZone name
confirmYesMust be true to run the operation.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so 'DESTRUCTIVE' largely restates them. However, the description adds a concrete authorization requirement ('Requires pdns/edit permission'), which is real behavioral context not present in 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.

Conciseness5/5

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

Two compact sentences with the destructive warning and permission requirement front-loaded; no filler or redundancy.

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

Completeness4/5

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 the safety profile and auth requirement. It stops short of stating irreversibility or behavior when the record does not exist, but annotations already carry the destructive signal.

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

Parameters3/5

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 no parameter detail (zone, name, type, confirm) beyond what the schema already documents, so it earns no extra credit here.

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

Purpose4/5

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

States a specific verb (Delete) and resource (DNS record) scoped to a zone, and names the backing operation (pdns/delete_dns). The resource 'record' implicitly separates it from siblings like delete_dns_zone, delete_dns_domain, and delete_dns_subdomain, 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.

Usage Guidelines3/5

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

Implies usage (removing a DNS record) and gives a prerequisite (pdns/edit permission), but offers no explicit when-to-use vs alternatives guidance among the many delete_dns_* and edit_dns_subdomain siblings.

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

delete_dns_subdomainA
Destructive
Inspect

Delete a subdomain from the subdomains table (pdns/delete_subdomain). DESTRUCTIVE. Requires pdns/edit permission.

NameRequiredDescriptionDefault
idYesSubdomain ID
confirmYesMust be true to run the operation.
server_idYesServer ID

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, so 'DESTRUCTIVE' is largely redundant. The genuinely additive content is the stated pdns/edit authorization requirement and the underlying API endpoint reference, which the annotations do not convey. It stops short of saying what else is affected (e.g. records under the subdomain) or that the deletion is irreversible.

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

Conciseness5/5

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

Three tight fragments with zero filler, front-loaded with the action and resource. Both the DESTRUCTIVE warning and the permission requirement are placed where an agent will see them before parsing parameters.

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

Completeness4/5

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

For a 3-parameter destructive call with no output schema, the definition covers purpose, safety flag, required permission, and endpoint. It is nearly complete; only the blast radius of the deletion and any confirmation/lookup requirements are left unstated, which the confirm parameter partially mitigates.

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

Parameters3/5

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

Schema description coverage is 100%: id, confirm and server_id are all documented in the schema, including the 'Must be true to run the operation' semantics for confirm. The description adds no parameter-level detail 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.

Purpose4/5

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

States a specific verb and resource ('Delete a subdomain from the subdomains table') and even names the backing endpoint (pdns/delete_subdomain), so an agent can distinguish it from edit_dns_subdomain or add_dns_subdomain. It does not, however, explicitly contrast itself with the similarly named delete_dns_domain or delete_dns_zone siblings.

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

Usage Guidelines3/5

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

The description supplies the prerequisite 'Requires pdns/edit permission', which tells the agent under what conditions the call will succeed. It gives no when-to-use vs when-not guidance and does not route the agent to alternatives such as edit_dns_subdomain or delete_dns_domain.

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

delete_dns_zoneA
Destructive
Inspect

Delete a DNS zone by name along with all records and metadata (pdns/delete_zone). DESTRUCTIVE. Requires pdns/edit permission.

NameRequiredDescriptionDefault
zoneYesZone name
confirmYesMust be true to run the operation.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and readOnlyHint=false, but the description adds real value beyond them: it discloses that all records and metadata are cascaded away (not just the zone object) and that a specific permission scope (pdns/edit) is required. It stops short of stating irreversibility or confirmation behavior.

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

Conciseness4/5

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

Front-loaded with the action and its blast radius, followed by the risk flag and permission requirement in short fragments. Slightly telegraphic (three fragments rather than flowing prose) but nothing is wasted.

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

Completeness4/5

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

For a two-parameter destructive tool with no output schema and full annotation coverage, the description supplies the important extras: cascade scope, permission requirement, and the underlying endpoint. Only the absence of any return/error expectation or reversibility note keeps it from a 5.

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

Parameters3/5

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

Schema description coverage is 100%, so both 'zone' and 'confirm' are already documented in the schema, including the 'must be true' semantics of confirm. The description's 'by name' adds only marginal meaning over 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.

Purpose5/5

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

States a specific verb (Delete) and resource (DNS zone) with scope clarified: 'along with all records and metadata'. The named API call (pdns/delete_zone) further pins it down, and it is clearly distinguishable from siblings like delete_dns_domain, delete_dns_subdomain, and delete_dns_record.

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

Usage Guidelines3/5

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

It signals the risk profile ('DESTRUCTIVE') and the required permission ('Requires pdns/edit permission'), which implies caution, but it never says when to prefer this over sibling deletes (e.g. domain vs zone) or any preconditions such as zone must be empty. 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.

delete_iso_imageA
Destructive
Inspect

Delete an ISO image by ID (iso/delete). DESTRUCTIVE. Per docs, available only to Hostkey staff — clients will likely get a permission error.

NameRequiredDescriptionDefault
idYesISO image ID
confirmYesMust be true to run the operation.

TDQS

A3.7/5.0
Behavior4/5

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

The 'DESTRUCTIVE' label duplicates destructiveHint=true, but the description adds genuinely new context beyond annotations: the authorization requirement and likely permission failure for clients. It stops short of describing irreversibility or effects on mounted ISOs.

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

Conciseness4/5

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

Three short, front-loaded sentences with no padding; the destructive nature and auth caveat lead. The parenthetical endpoint reference is mildly redundant but compact.

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

Completeness4/5

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

For a destructive single-resource delete with annotations covering the safety profile and full schema documentation, the definition supplies the key extra detail (staff-only access). It omits whether deletion is reversible or how mounted ISOs are affected, a minor gap.

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

Parameters3/5

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

Schema coverage is 100%, so both id and confirm are fully documented in the schema. The description only echoes the 'by ID' concept and adds no syntax or format detail beyond what the schema already provides.

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

Purpose4/5

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

States a specific verb and resource ('Delete an ISO image by ID') and even names the underlying endpoint (iso/delete). The operation is unambiguous, though it doesn't explicitly contrast with nearby siblings like unmount_iso.

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

Usage Guidelines3/5

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

Provides a useful permission caveat ('available only to Hostkey staff — clients will likely get a permission error') that warns when the call will fail, but gives no positive when-to-use framing nor names an alternative operation.

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

discard_rhr_requestB
Destructive
Inspect

Cancel/close a Remote Hands request (rhr/discard). DESTRUCTIVE: the request will be cancelled.

NameRequiredDescriptionDefault
idYesRequest ID
confirmYesMust be true to run the operation.

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and openWorldHint=true, so 'DESTRUCTIVE: the request will be cancelled' only restates structured data rather than adding context. Nothing is said about irreversibility, whether the rhr can be recreated, required permissions, or effects on related tasks.

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

Conciseness5/5

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

Two short clauses, front-loaded with the action and immediately followed by the destructive warning. No filler or redundant explanation.

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

Completeness4/5

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

For a two-parameter destructive operation with full schema coverage and annotations covering the safety profile, plus no output schema to explain, the definition is close to sufficient. The remaining gap is the absence of any usage context distinguishing it from the other rhr and cancellation tools.

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

Parameters3/5

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

Schema description coverage is 100% for both parameters (id and confirm), so the schema already carries full parameter meaning. The description adds no syntax, sourcing, or format detail; 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.

Purpose4/5

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

States a specific verb pair (cancel/close) and a specific resource (Remote Hands request), with the internal operation name 'rhr/discard' disambiguating it from create_rhr_request, list_rhr_requests, and add_rhr_comment. It does not explicitly name an alternative tool, but the resource+action combination is unambiguous within the sibling set.

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

Usage Guidelines2/5

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

No when-to-use guidance, no prerequisites beyond the schema-level confirm flag, and no routing to alternatives such as delete_cancellation_request or other rhr management tools. The agent must infer the context entirely.

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

download_invoiceA
Read-only
Inspect

Download an invoice as PDF (whmcs/download_invoice). InvAPI returns binary PDF; MCP returns JSON with encoding=base64 and data — decode to a .pdf file.

NameRequiredDescriptionDefault
invoice_idYesInvoice number

TDQS

A3.7/5.0
Behavior3/5

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

readOnlyHint and openWorldHint already tell the agent this is a safe read that reaches outside. The description adds genuinely useful behavior: the API returns binary PDF but MCP returns JSON with base64 encoding, a non-obvious transport difference. However it omits error behavior (e.g., what happens for an invalid or unauthorized invoice_id).

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

Conciseness4/5

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

Two dense sentences that front-load the action and include the endpoint and encoding detail. Efficient, though the parenthetical endpoint reference is slightly technical clutter.

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

Completeness4/5

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

Complete for a single-param read tool: it says what is produced (PDF), how it arrives (base64 in JSON), and what to do with it. No output schema exists, and the description compensates by describing the return shape. Minor gap on failure modes.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter has a clear description ('Invoice number'). The description adds no parameter-level semantics 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.

Purpose5/5

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

States a specific verb (download) and resource (invoice) with the output format (PDF). The sibling list contains get_invoice, get_invoices, and get_server_invoices, and this description makes clear this is the download-PDF variant rather than metadata retrieval.

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

Usage Guidelines3/5

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

The description implies use when a PDF is needed, but never explicitly contrasts with get_invoice/get_invoices to say when to prefer this over those. Usage context is inferable from the purpose, not stated.

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

drop_natB
Destructive
Inspect

Delete a NAT record from the database (nat/drop_nat). DESTRUCTIVE, internal/ops action.

NameRequiredDescriptionDefault
idNoNAT record ID
ipNoRecord IP address
confirmYesMust be true to run the operation.

TDQS

B3.2/5.0
Behavior3/5

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 description's 'DESTRUCTIVE' label largely repeats structured data. It does add that this is an internal/ops action, which is meaningful context, but says nothing about reversibility, permission requirements, or the confirm guard.

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

Conciseness4/5

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

Two compact clauses, front-loaded with the verb and resource. The endpoint parenthetical is a small but useful detail; the 'DESTRUCTIVE' restatement is mild redundancy given the annotations, but the text wastes little.

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

Completeness3/5

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 the what but not the how-it-interacts-with-siblings picture, and it never mentions the required confirm flag that the schema mandates. Annotations carry the safety profile, so this is minimally adequate rather than complete.

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

Parameters3/5

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

Schema description coverage is 100%, covering id, ip, and the required confirm flag, so the baseline is 3. The description adds no parameter guidance at all — notably it never explains that id or ip must be supplied to identify the record.

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

Purpose4/5

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

States a specific verb and resource: delete a NAT record, and even names the internal endpoint (nat/drop_nat). It does not, however, distinguish itself from closely related siblings such as remove_static_nat or clear_static_nat, so an agent could still hesitate between them.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of the obvious alternatives (clear_static_nat, remove_static_nat). The phrase 'internal/ops action' hints at restricted usage but never states the condition that selects this tool.

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

edit_dns_subdomainBInspect

Update a subdomain (pdns/edit_subdomain). Requires pdns/edit permission.

NameRequiredDescriptionDefault
idYesSubdomain ID
confirmYesMust be true to run the operation.
server_idNoServer ID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare this as a non-read-only, non-destructive, open-world mutation, so the safety profile is covered. The description adds the auth requirement (pdns/edit), but says nothing about what is mutated, reversibility, or side effects 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.

Conciseness4/5

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

Two compact fragments with no filler; the operation is front-loaded ahead of the permission note. Efficient, though the parenthetical endpoint reference is redundant with the tool name.

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

Completeness3/5

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

With 100% schema coverage and annotations carrying the safety profile, the essentials are present. It remains thin on the actual mutation surface — it never indicates which subdomain fields can be changed — leaving the agent to infer the edit scope.

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

Parameters3/5

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

Schema description coverage is 100%, with id, confirm, and server_id all documented in the schema, so the baseline is 3. The description adds no syntax or constraint 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.

Purpose4/5

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

States a specific verb (update) and resource (subdomain), which cleanly separates it from the add_/delete_/list_ DNS subdomain siblings. It does not clarify which attributes of the subdomain are editable.

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

Usage Guidelines3/5

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

Provides a real prerequisite ('Requires pdns/edit permission'), which is genuine usage context. However, it gives no when-to-use vs alternatives guidance and no exclusions relative to add_dns_subdomain or delete_dns_subdomain.

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

generate_due_invoiceCInspect

Create the next invoice for a server (whmcs/generate_due_invoice).

NameRequiredDescriptionDefault
idYesServer ID
confirmYesMust be true to run the operation.

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, so the mutation nature is partly covered. The description adds nothing beyond that: it omits the 'confirm must be true' guard, does not clarify idempotency (whether repeated calls generate duplicate invoices), and gives no billing side-effect context, which matters for an invoice-generating mutation.

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

Conciseness4/5

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

A single front-loaded sentence with no filler, which is efficient. It is arguably under-specified rather than padded, but as pure structure it is tight and wastes no words.

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

Completeness2/5

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

For a billing mutation tool with no output schema, the description should convey what the call produces and its consequences. It does not explain the resulting invoice, billing period, or side effects, leaving the agent without enough context to invoke it confidently.

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

Parameters3/5

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

Schema description coverage is 100%, with both 'id' (Server ID) and 'confirm' documented in the schema, so the baseline of 3 applies. The description adds no extra meaning about the parameters beyond what the schema already states.

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

Purpose3/5

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

The description gives a verb+resource ('Create the next invoice for a server'), which is better than a tautology, but 'next invoice' is ambiguous about billing period and cycle, and it is not distinguished from the closely related sibling create_addfunds_invoice. The parenthetical '(whmcs/generate_due_invoice)' is just an internal identifier and adds no disambiguating value.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as create_addfunds_invoice, get_invoices, or mass_pay, nor any when-not or prerequisite conditions. The agent is left to infer the intended scenario entirely.

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

get_account_infoA
Read-only
Inspect

Current API token and account info (auth/info): available calls, account type and role, linked server IDs. Useful to verify the connection.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint=true, openWorldHint=true), so the description only needs to add context. It does disclose the concrete returned fields (available calls, account type/role, linked server IDs), which helps the agent judge whether the call is worth making. It stops short of stating auth requirements or whether the token itself is echoed back, so not a full 5.

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

Conciseness5/5

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

Two compact sentences, front-loaded with the resource and its contents, then the use case. No filler or restating of the name.

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

Completeness4/5

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

With no parameters, a read-only annotation, and no output schema, the description carries the burden of describing return content and does so with a concrete field list. Minor gaps (auth semantics, whether token value is included) keep it from being fully complete, but it is sufficient to call the tool correctly.

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

Parameters4/5

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

Zero parameters with 100% schema coverage, so there is nothing for the description to clarify; the baseline for a parameterless tool applies. Little to add or subtract here.

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

Purpose5/5

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

States a specific verb+resource ('get account info') and enumerates the payload ('available calls, account type and role, linked server IDs'), which distinguishes it from credential-management siblings like list_api_keys or get_billing_client. An agent can tell what this returns 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.

Usage Guidelines3/5

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

The closing sentence 'Useful to verify the connection' implies a usage context but names no alternatives and no when-not conditions. Nothing tells the agent whether to prefer this over get_billing_client or list_api_keys for account-level questions, 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_api_keyB
Read-only
Inspect

Details for a specific API key (api_keys/view).

NameRequiredDescriptionDefault
idYesKey ID from list_api_keys

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only the endpoint path, disclosing nothing about auth/permission requirements, behavior on an invalid or foreign key ID, or sensitive-data characteristics of the returned key material.

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

Conciseness4/5

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

One short, front-loaded sentence with no filler. It is efficiently sized for a trivial getter, though the parenthetical endpoint reference is of marginal value to an agent.

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

Completeness3/5

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

For a simple read-only getter with a fully documented single parameter and annotations covering safety, the minimum is met. However, with no output schema, the description could have said what the response contains (key token, permissions, creation date) and it does not.

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

Parameters3/5

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 ('Key ID from list_api_keys'), so the schema already carries the semantic load. The description adds no format, range, or sourcing detail beyond what the schema states, making the baseline 3 appropriate.

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

Purpose4/5

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

States a specific resource ('a specific API key') and implies a retrieve verb via 'Details for', plus the underlying endpoint (api_keys/view). It is clear what the tool returns conceptually, but it never names the sibling it differs from (list_api_keys, get_api_key_history) to help an agent disambiguate.

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

Usage Guidelines3/5

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

Usage is only implied: fetch details for one key given an ID. The schema's 'Key ID from list_api_keys' hints at the workflow (list first, then get), but the description itself gives no when-to-use, prerequisites, or alternatives versus get_api_key_history/list_api_keys.

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

get_api_key_historyB
Read-only
Inspect

API key usage history for a period (api_keys/history).

NameRequiredDescriptionDefault
idYesKey ID
period_toNoPeriod end, YYYY-MM-DD
period_fromNoPeriod start, YYYY-MM-DD

TDQS

B3.3/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is clear. The description adds only the endpoint and the period-scoping concept, but does not describe return format, pagination, or rate limits. With annotations covering the safety profile, this is minimally acceptable additional context.

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

Conciseness5/5

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

A single, front-loaded sentence with no wasted words. It is appropriately sized for a simple read-only tool.

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

Completeness3/5

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

The tool has no output schema, so the description could usefully explain what 'usage history' returns (e.g., call counts, bandwidth, time-series data). It also omits any usage guidance. Given the simple read-only nature and complete schema, the description is adequate for invocation but leaves notable gaps for result interpretation and tool selection.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters (id, period_from, period_to) are already documented in the schema. The description's 'for a period' phrase adds marginal contextual meaning but no syntax or format details beyond what the schema provides.

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

Purpose4/5

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

The description states a clear resource ('API key usage history') and scope ('for a period'), and the parenthetical endpoint reinforces the intent. It distinguishes itself from get_api_key and list_api_keys by focusing on historical usage, but does not explicitly name or contrast with those siblings.

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

Usage Guidelines2/5

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

The description offers no guidance on when to use this tool versus alternatives like get_api_key or list_api_keys. There is no mention of prerequisites, context, or exclusions.

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

get_billing_clientB
Read-only
Inspect

Client data from billing (whmcs/get_client): contacts, currency, account status.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the shape of the payload (contacts, currency, account status) but says nothing about auth requirements, rate limits, or error behavior.

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

Conciseness4/5

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

A single front-loaded sentence with no padding; the parenthetical API endpoint is compact. Slightly telegraphic, but nothing is wasted.

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

Completeness4/5

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 listing the main returned fields, and with no parameters and read-only annotations there is little else an agent needs. Missing only guidance on how it relates to sibling billing/contact tools.

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

Parameters4/5

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 for the description to explain; the baseline of 4 applies.

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

Purpose4/5

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

States a specific verb+resource ('Client data from billing') and enumerates the returned fields (contacts, currency, account status), which is more than a tautology. It does not explicitly distinguish itself from near-neighbors like get_contacts or get_server_billing_data, 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.

Usage Guidelines2/5

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 get_contacts, get_account_info, or get_server_billing_data. The reader must infer usage purely from the field list.

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

get_cancellation_requestsB
Read-only
Inspect

List of active service cancellation requests (whmcs/get_cancellation_requests).

NameRequiredDescriptionDefault
idNoServer ID (filter)

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the 'active' scoping nuance (implying non-active/cancelled requests are excluded), but says nothing about 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.

Conciseness4/5

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

A single tight sentence with the resource front-loaded. The trailing API endpoint path '(whmcs/get_cancellation_requests)' is marginally useful for traceability but slightly redundant.

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

Completeness3/5

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

For a simple read-only listing tool with annotations covering safety and full schema coverage, this is minimally adequate. It omits when-to-use routing and any return-shape hints, but nothing critical is missing for correct invocation.

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

Parameters3/5

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

Only one optional parameter with 100% schema coverage ('Server ID (filter)'), so the schema already documents it fully. The description adds no additional meaning about how the id filter behaves (e.g., whether omitting it returns all requests).

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

Purpose4/5

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

States a specific verb ('List') and resource ('active service cancellation requests'), making the read intent unmistakable. The 'active' qualifier scopes it somewhat, though it doesn't explicitly contrast with siblings like delete_cancellation_request or request_cancellation.

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

Usage Guidelines2/5

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

No guidance on when to use this versus request_cancellation (to create one) or delete_cancellation_request (to remove one). The agent must infer from names alone that this is the read-only listing counterpart.

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

get_contactsB
Read-only
Inspect

List of additional account contacts (whmcs/get_contacts).

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only the internal endpoint path (whmcs/get_contacts), with nothing about return contents, pagination, or whether the list is scoped to the authenticated account.

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

Conciseness4/5

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

A single front-loaded sentence with no padding. The parenthetical API path is arguably noise for an agent, but it costs little and the whole description is one line.

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

Completeness3/5

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

For a zero-parameter, annotated read tool this is close to sufficient, but with no output schema the description could have named the contact fields returned (name, email, etc.) or clarified scope. Adequate but leaves a real gap.

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

Parameters4/5

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 schema is trivially complete.

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

Purpose4/5

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

The description names a specific resource (account contacts) and implies the list/read verb, which cleanly separates it from the write siblings add_contact, update_contact, and delete_contact. The qualifier 'additional' hints these are secondary contacts rather than the primary billing client, though it is not spelled out.

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

Usage Guidelines2/5

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 such as get_billing_client or the contact mutation tools. No prerequisites, auth requirements, or filtering context are given.

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

get_credit_historyC
Read-only
Inspect

Credit balance movement: credit additions and deductions (whmcs/getcredits).

NameRequiredDescriptionDefault
idYesServer ID

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only the upstream endpoint hint (whmcs/getcredits); it says nothing about time range, pagination, or whether the id is a client or server identifier, which is the main behavioral ambiguity here.

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

Conciseness4/5

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

A single front-loaded clause with the endpoint reference tucked in parentheses; no wasted sentences. It is efficient, though the endpoint detail is of marginal value to an agent.

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

Completeness3/5

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 with no output schema and read-only annotations, this is minimally adequate, but it omits the return shape (a list of movements) and any temporal/pagination behavior, leaving the agent to discover those at call time.

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

Parameters3/5

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

One parameter with 100% schema description coverage, so the schema already documents 'id' as Server ID. The description adds no syntax or interpretation beyond that, which is the expected baseline when the schema does the work.

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

Purpose4/5

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

The description names a specific resource (credit balance movement) and enumerates the two kinds of entries it reports (additions and deductions), which is more than a restatement of the name. It does not, however, differentiate itself from adjacent billing siblings such as get_transactions, apply_credit, or get_server_billing_data.

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

Usage Guidelines2/5

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 an alternative, no prerequisite (e.g. which id is expected), and no scope caveat. 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.

get_dns_zoneA
Read-only
Inspect

DNS zone contents: all records (A, AAAA, CNAME, MX, TXT, etc.) from the authoritative server (pdns/view_zone).

NameRequiredDescriptionDefault
zoneYesZone name, e.g. example.com

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful context by naming the authoritative backend (pdns/view_zone), which signals live rather than cached data, but it says nothing about pagination, error behavior, or result size for large zones.

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

Conciseness4/5

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

A single compact sentence with the resource front-loaded and no filler. The parenthetical backend reference earns its place as provenance, though the colon fragment is slightly clipped rather than a clean declarative statement.

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

Completeness4/5

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 no output schema and annotations covering safety, this is nearly complete: it states the input subject, the source system, and the shape of the returned data. It stops just short of the profile of a 5 because nothing addresses large-zone responses or failures.

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

Parameters3/5

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

Schema description coverage is 100% and the single 'zone' parameter is documented with an example (example.com), so the schema does the heavy lifting. The description adds no format constraints or naming rules beyond that, which is the expected baseline.

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

Purpose4/5

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

The description names the resource precisely (DNS zone contents) and enumerates what is returned (A, AAAA, CNAME, MX, TXT, etc.), which distinguishes it from list_dns_zones, add_dns_zone, and delete_dns_zone. Its only weakness is the noun-phrase framing – there is no explicit retrieval verb, though 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.

Usage Guidelines3/5

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

Usage is implied by scope: fetch the record set for one zone, given a zone name. There is no explicit when-to-use vs. when-not or reference to siblings such as list_dns_zones, so the agent must infer the selection criteria itself.

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

get_invoiceC
Read-only
Inspect

Data for a specific invoice for payment (whmcs/get_invoice).

NameRequiredDescriptionDefault
invoice_idYesInvoice number

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. Beyond that, the description only adds the vague qualifier 'for payment', which is ambiguous rather than informative. It does not disclose what the response contains, whether unpaid invoices differ from paid ones, or any auth/scoping requirements.

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

Conciseness4/5

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

A single short sentence with no padding, and the resource ('a specific invoice') appears early. It is well-sized for the tool, though the parenthetical API-method reference is marginally useful filler.

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

Completeness2/5

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

With no output schema and no real behavioral detail, the description leaves the agent guessing what 'data' is returned and how this differs from the large family of related billing/read tools. For a simple one-parameter read this is not catastrophic, but it under-serves a namespace crowded with near-neighbors.

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

Parameters3/5

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

Schema description coverage is 100% for the single required parameter (invoice_id, documented as 'Invoice number'), so the schema fully carries parameter meaning. The description adds nothing about the parameter's format or where the ID comes from, which is the baseline case for high-coverage schemas.

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

Purpose3/5

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

It names the resource (a specific invoice) and implies retrieval via 'Data for...', with the underlying API method 'whmcs/get_invoice' as a parenthetical. However, the verb is nominal rather than action-oriented, and with siblings like get_invoices, get_server_invoices, and download_invoice present, it does nothing to distinguish itself 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.

Usage Guidelines2/5

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 get_invoices (list all) or download_invoice (retrieve the document). The phrase 'for payment' hints at a billing context but never says whether this is a pre-payment lookup, a verification step, or what triggers its use. The agent must infer everything 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_invoicesB
Read-only
Inspect

Full list of account invoices (whmcs/get_invoices).

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds no behavioral context beyond that – no pagination behavior, no result-size expectations, and no auth prerequisites for a list tool that could return many invoices.

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

Conciseness4/5

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

A single front-loaded sentence with no padding; the scope ('full list of account invoices') comes before the parenthetical endpoint reference, which is a minor but essentially harmless addition. Efficient and unambiguous.

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

Completeness3/5

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

For a parameterless list tool with annotations covering safety and no output schema, the description is close to adequate, but it omits any hint about result volume or pagination, which matters for a 'full list of invoices' call. Adequate but with a clear remaining gap.

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

Parameters4/5

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

The tool takes zero parameters (schema coverage 100% trivially), so per the rubric a baseline of 4 applies. There is nothing parameter-related for the description to compensate for.

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

Purpose4/5

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

States a clear verb and resource ('get_invoices') and scopes it as the full list of account invoices, which implicitly distinguishes it from get_invoice (single) and get_server_invoices. It does not explicitly name or differentiate against those siblings, but the 'full list' phrasing makes the scope legible.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus get_invoice, get_server_invoices, or download_invoice. It simply asserts what it returns, leaving the agent to infer selection criteria from sibling names alone.

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

get_ip_infoC
Read-only
Inspect

Network interface information by IP address (ip/get_ip).

NameRequiredDescriptionDefault
ipYesIP address

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and outside-the-sandbox behaviour are covered. The description adds nothing beyond a restatement of the resource plus the raw API path '(ip/get_ip)', giving no insight into what fields are returned or whether the IP must be owned by 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.

Conciseness4/5

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

A single short line that is front-loaded with the resource and the lookup key, with no padding. The parenthetical API path is mildly extraneous but not harmful, and the whole thing is arguably under-specified rather than over-long.

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

Completeness3/5

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 no output schema and annotations covering the safety profile, the minimum is met, but the agent is not told what the 'information' comprises (name, MAC, addresses, PTR) or any preconditions on the IP. Adequate but with clear gaps.

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

Parameters3/5

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

Schema description coverage is 100% for the single 'ip' parameter, so the baseline is 3. The phrase 'by IP address' merely echoes the schema and adds no format or validation meaning.

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

Purpose4/5

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

States a specific resource ('network interface information') and the keying parameter ('by IP address'), so the agent knows this is a read lookup keyed on an IP. It is a noun phrase rather than a verb+resource sentence, and it does not distinguish itself from nearby siblings like get_network_status, get_port_graphs, or get_ptr_record.

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

Usage Guidelines2/5

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. With siblings such as get_network_status and get_port_graphs operating in the same networking area, the description never says which situation selects this tool, nor does it name an alternative.

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

get_network_statusA
Read-only
Inspect

Server network interface status (net/get_status): port, switch, VLAN, speed, MAC, link status. Optional port limits the query to one interface (useful when another NIC has no upstream_id).

NameRequiredDescriptionDefault
idYesServer ID
portNoOptional physical/logical interface or switch port (e.g. eth0). Omit to query all; if InvAPI fails on an unmapped NIC, retry with a mapped port from get_server.

TDQS

A3.8/5.0
Behavior4/5

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

With readOnlyHint and openWorldHint annotations covering safety, the description adds value by enumerating the fields returned and noting a behavioral quirk: another NIC may lack an upstream_id. It does not discuss error handling, rate limits, or permissions, but the added return-value context is substantial 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.

Conciseness5/5

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

The description is two sentences with zero waste: the first front-loads the purpose and returned fields, and the second provides a specific, actionable usage note. Every sentence earns its place.

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

Completeness4/5

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

Given the read-only annotations and full schema coverage, the description is nearly complete for this tool. It lists return fields, which compensates for the lack of an output schema, though it could mention error behavior or upstream_id implications more explicitly. Still, it provides all essential context for an agent to call the tool correctly.

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

Parameters3/5

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's note about `port` limiting the query to one interface (useful when another NIC has no upstream_id) largely repeats information already present in the schema's `port` description, adding no new semantic detail.

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

Purpose4/5

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

The description clearly states it retrieves server network interface status and lists the specific fields returned (port, switch, VLAN, speed, MAC, link status). It does not explicitly differentiate from any sibling tool, but no sibling appears to perform a similar network-status retrieval, so an agent can still easily identify its purpose.

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

Usage Guidelines3/5

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

The description offers a usage hint for the optional `port` parameter ('useful when another NIC has no upstream_id'), which implies when to use that parameter. However, it does not state when to use this tool versus alternatives (e.g., other network-related tools like `get_port_graphs` or `get_server`), leaving overall usage guidance implicit.

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

get_payment_gatewayC
Read-only
Inspect

Payment methods for a specific invoice (whmcs/getpaymentgw).

NameRequiredDescriptionDefault
invoice_idYesInvoice number

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered, but the description adds nothing beyond the basic purpose: no indication of what the result contains (gateway list, statuses, availability), no auth or scoping notes. The bar is lower with annotations present, yet no extra behavioral context is supplied.

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

Conciseness4/5

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

A single short sentence plus an endpoint reference; nothing is wasted and it is front-loaded. It is efficient, though the endpoint token adds little value to an agent selecting the tool.

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

Completeness3/5

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 full schema coverage and safety annotations, the description is minimally adequate. It omits the action verb and any hint of return shape, which matters since no output schema exists.

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

Parameters3/5

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

Only one parameter exists and schema description coverage is 100% ('Invoice number'), so the schema carries the semantics. The description's phrase 'for a specific invoice' merely restates the parameter's role and adds no format or usage detail.

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

Purpose3/5

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

The description names the resource ('Payment methods for a specific invoice') but uses a noun phrase with no verb, leaving it ambiguous whether it lists payment gateways available to pay the invoice or methods already used. It also does not distinguish this from nearby billing siblings such as get_invoice or get_transactions. Understandable, but vaguer than a clean verb+resource statement.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no mention of prerequisites (e.g., the invoice must exist or be unpaid), and no reference to any alternative tool. The agent is left to infer the context entirely.

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

get_port_graphsB
Read-only
Inspect

Port utilization graphs for a period (net/show_cacti): day/month/year.

NameRequiredDescriptionDefault
idYesServer ID
portYesPhysical switch port
graphYes1 — day, 2 — month, 3 — year

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds only a cryptic source reference ('net/show_cacti') and the period granularity, but does not disclose return format, pagination, or any other behavioral trait beyond what annotations imply.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no wasted words. It packs purpose, source hint, and period options efficiently.

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

Completeness3/5

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 full schema coverage and safety annotations, the description covers the core purpose. However, with no output schema, it could say more about what the returned graphs actually contain or how to interpret them.

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

Parameters3/5

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. The description repeats the day/month/year options without adding syntax or meaning beyond the schema's 'graph' description.

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

Purpose4/5

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

The description states the resource clearly: port utilization graphs for a time period, with day/month/year options. It does not explicitly differentiate from sibling tools, but the resource is specific enough for an agent to identify the tool's function.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives such as get_network_status or get_power_status. It merely enumerates the period options, leaving usage context entirely implicit.

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

get_power_statusB
Read-only
Inspect

Current server power status (on/off).

NameRequiredDescriptionDefault
idYesServer ID

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safe-read profile is covered. The description adds a small amount of behavioral value by naming the returned states (on/off), but says nothing about latency, freshness, or error behavior when the server is unreachable.

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

Conciseness4/5

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

A single compact sentence with the resource and result domain front-loaded and no filler. It is slightly telegraphic and lacks a closing period, but every word earns its place.

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

Completeness4/5

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

For a one-parameter, annotation-covered read tool with no output schema, the description covers the essential purpose and the shape of the answer. A brief note on failure cases (unreachable/unknown server) would make it fully complete, but nothing critical is missing.

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

Parameters3/5

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

Schema description coverage is 100% for the single 'id' parameter ('Server ID'), so the schema already carries parameter meaning. The description adds no further qualifier such as whether the ID is a numeric server identifier versus a hostname, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (get) and resource (server power status), plus the returned value domain (on/off), so the agent knows exactly what it retrieves. It does not, however, distinguish itself from lookalike siblings such as get_server or get_network_status, which it could have done in a phrase.

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

Usage Guidelines2/5

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 versus alternatives. Siblings like power_on, power_off, request_rh_power_on, and request_rh_power_off are close neighbors, and the description gives no cue about which to pick or any prerequisite (e.g., checking status before a power action).

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

get_presetB
Read-only
Inspect

Details for one preset or all presets (presets/show). May require auth depending on permissions.

NameRequiredDescriptionDefault
idNoPreset ID; omit for full list

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds an auth caveat that annotations do not express, which is genuinely useful, but the hedge 'may require auth depending on permissions' is too vague to be actionable (which permission? what happens if unauthorized?).

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

Conciseness4/5

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

Very short and front-loaded: the resource and scope come first, with a secondary note on auth. The endpoint breadcrumb '(presets/show)' is slightly gratuitous but harmless. Nothing is padded.

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

Completeness3/5

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

For a trivial one-optional-param read tool, the definition is adequate but thin. With no output schema, the agent gets no hint of what 'details' comprise (settings fields? pricing? configuration?), and the auth condition is left unresolved.

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

Parameters3/5

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

Schema coverage is 100%, and the single parameter's description ('Preset ID; omit for full list') already conveys the optionality semantics. The description's 'one preset or all presets' merely restates that, adding no format or constraint detail.

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

Purpose4/5

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

States the resource and scope precisely: details for a single preset or the full collection, with the underlying endpoint (presets/show) named. However, it never distinguishes itself from siblings like list_presets or search_presets, and 'or all presets' overlaps semantically with list_presets, leaving the agent to 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.

Usage Guidelines2/5

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

The only guidance is the weak conditional 'may require auth depending on permissions,' which gives no actionable rule. Nothing tells the agent when to pick this over list_presets, search_presets, or get_preset_pricing, despite four closely related preset siblings.

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

get_preset_pricingB
Read-only
Inspect

Prices for available presets in given currencies (presets/info). No token required.

NameRequiredDescriptionDefault
currenciesNoCurrency codes, comma-separated, e.g. EUR,USD. Default EUR

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety profile is covered. The description adds one useful behavioral fact not in annotations: 'No token required,' which is relevant for unauthenticated access. It does not, however, describe caching, currency defaults beyond the schema, 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.

Conciseness4/5

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

A single compact sentence with the core purpose front-loaded, plus the endpoint hint and auth note. No wasted words, though it is arguably too terse to be maximally useful.

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

Completeness4/5

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

For a single-optional-parameter read-only tool with 100% schema coverage and clear annotations, the description covers purpose and the notable auth exemption. Since no output schema exists, return-value detail is not strictly required, though a hint about the pricing structure would help.

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

Parameters3/5

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

Schema description coverage is 100%, so the currencies parameter is already fully documented with format ('EUR,USD') and default ('EUR'). The description's 'in given currencies' only restates 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.

Purpose4/5

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

Clear verb+resource combination: retrieves pricing for presets in specified currencies. Distinguishes itself as a pricing lookup rather than a preset listing, but does not explicitly differentiate from siblings like get_preset or list_presets, which could also be candidates for preset-related queries.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives such as get_preset (preset details) or list_presets (available presets). The only contextual note is 'No token required,' which covers auth rather than tool selection.

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

get_ptr_recordB
Read-only
Inspect

Current PTR record (reverse DNS) for an IP address (ip/get_ptr).

NameRequiredDescriptionDefault
idYesServer ID
ipYesIP address

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds only that the value returned is the 'current' reverse-DNS record, with no note on whether a record may be absent or how the lookup fails.

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

Conciseness4/5

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

A single sentence with zero padding, front-loading the resource and its reverse-DNS nature. It is arguably too terse to be maximally useful, but nothing is wasted.

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

Completeness3/5

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 ideally hint at the return shape (e.g., a hostname string) or a not-found case; it only says 'Current PTR record'. For a simple two-parameter read covered by annotations, this is adequate but leaves a small gap.

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

Parameters3/5

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

Schema description coverage is 100% (both 'id' = Server ID and 'ip' = IP address are documented in the schema), so the baseline is 3. The description adds no format or syntax detail beyond the schema.

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

Purpose4/5

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

States a specific verb+resource: reads the 'Current PTR record (reverse DNS)' for an IP, and the '(ip/get_ptr)' note pins the underlying endpoint. It does not explicitly distinguish itself from the sibling update_ptr_record, which would be the obvious confusion point, 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.

Usage Guidelines2/5

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

The description says what the tool returns but never states when to use it versus alternatives such as update_ptr_record or get_ip_info, nor any prerequisites. An agent must infer from the name that this is read-only retrieval.

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

get_serverA
Read-only
Inspect

Full server details by ID (eq/show): configuration, network, status, location.

NameRequiredDescriptionDefault
idYesServer ID in InvAPI

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description usefully enumerates the data domains returned (configuration, network, status, location), but adds nothing about permissions, freshness, 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.

Conciseness4/5

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

A single front-loaded sentence with no filler. The parenthetical '(eq/show)' is opaque API jargon that costs a little clarity without adding value.

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

Completeness4/5

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 comes back, and it does list the major content areas. It stops short of anything on pagination, error cases, or the meaning of the '(eq/show)' token.

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

Parameters3/5

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

Schema description coverage is 100% for the single 'id' parameter, so the schema already documents it as the InvAPI server ID. The description's 'by ID' reinforces but does not extend that meaning, which is the baseline-3 case.

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

Purpose4/5

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

States a specific verb and resource ('Full server details by ID') and enumerates the returned content areas (configuration, network, status, location). It is clearly the single-server fetch, implicitly distinct from the plural sibling get_servers, 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.

Usage Guidelines3/5

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

The phrase 'by ID' implies the precondition (you must already know the server ID), but there is no explicit when-to-use guidance or routing against alternatives like get_servers, get_power_status, or get_server_sensors.

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

get_server_billing_dataC
Read-only
Inspect

Billing information for a server rental (whmcs/get_billing_data).

NameRequiredDescriptionDefault
idYesServer ID

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds nothing beyond that – it doesn't say what billing data is returned (rates, renewal, payment status), whether it is cached/live, or whether it requires a billing-scoped 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.

Conciseness4/5

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

A single, tight sentence with no filler; the resource is front-loaded. The parenthetical backend path is harmless metadata.

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

Completeness2/5

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 is returned, and it does not – 'billing information' is left undefined. For a billing-domain getter in a large sibling set, this leaves the agent unable to predict the response.

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

Parameters3/5

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 integer 'id' fully documented in the schema, so baseline 3 applies. The description contributes no additional parameter meaning.

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

Purpose3/5

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

Names a resource (billing information for a server rental) and implies a getter via the tool name, but the phrase 'billing information' is vague about what fields are involved. It does not distinguish itself from close siblings like get_server_invoices or get_billing_client, which an agent must choose between.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no alternative named, and no prerequisite stated. With many billing-adjacent siblings (get_invoices, get_server_invoices, get_transactions, get_billing_client), 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_server_invoicesC
Read-only
Inspect

Invoices related to a specific server (whmcs/get_related_invoices).

NameRequiredDescriptionDefault
idYesServer ID

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds only the upstream API mapping (whmcs/get_related_invoices), which does not disclose pagination, ordering, result shape, or what counts as 'related'. Nothing behavioral 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.

Conciseness4/5

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

A single economical sentence with no waste, but it is arguably too terse: one short clause plus a parenthetical endpoint reference for a tool that could carry more routing detail.

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

Completeness3/5

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 no output schema this is minimally viable, but it omits what is returned (count, fields, pagination) and how it differs from get_invoices/get_invoice in a large billing sibling group.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter 'id' is documented as 'Server ID'. The description's 'specific server' phrasing reinforces this but adds no syntax or format 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.

Purpose4/5

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

States a specific resource (invoices) scoped to a specific server, which distinguishes it from the sibling get_invoices (all invoices) and get_invoice (single invoice). It lacks an explicit verb but the noun phrase plus scope is unambiguous enough to route correctly.

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

Usage Guidelines2/5

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

No guidance on when to use this versus get_invoices or get_invoice, nor any prerequisite or context. The scoping phrase 'related to a specific server' hints at the use case but leaves the agent to infer the alternative's condition.

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

get_serversA
Read-only
Inspect

List Hostkey account servers with filters. Before the first call, automatically refreshes inventory (eq/update_servers). Returns server IDs and brief data; use get_server for the full card.

NameRequiredDescriptionDefault
ipNoFind server by IP address
macNoFind server by MAC address
groupNoGroups, comma-separated: VPS,Gpu,1CPU,2CPU,AMD,Instances,Storage,Nodes,Micro,Mini,Dell
statusNoStatus: rent (active) or power_off (suspended)
locationNoLocation codes, comma-separated: NL,US,FI,DE,IS,TR,UK,ES,IT,PL,CH

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered, but the description adds a real behavioral trait not present in structured data: an automatic inventory refresh (eq/update_servers) triggered before the first call. It also discloses that results are summary-level, which sets expectations for downstream calls. It does not mention pagination or result caps.

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

Conciseness5/5

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

Three short sentences, front-loaded with identity and scope, then the side effect, then the routing hint. Nothing is padding and each sentence changes agent behavior.

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

Completeness4/5

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 carries the burden of saying what comes back ('server IDs and brief data') and points to the richer sibling for full detail. The pre-call refresh side effect is also covered. Pagination/volume limits are the only notable omission.

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

Parameters3/5

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

Schema description coverage is 100% and every parameter (ip, mac, group, status, location) already documents its semantics, including the accepted comma-separated codes. The description only says 'with filters' and adds no syntax, precedence, or combination rules 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.

Purpose5/5

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

The description names a specific verb and resource ('List Hostkey account servers') plus the filter scope, and explicitly separates itself from the sibling get_server by scoping its return to IDs and brief data. An agent can pick between get_servers and get_server 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.

Usage Guidelines4/5

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

It gives a concrete alternative and the condition that selects it ('use get_server for the full card'), which is exactly the routing decision an agent faces here. It stops short of stating when to use search_servers_by_tag or the stock-server listers, so it isn't fully exhaustive.

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

get_server_sensorsA
Read-only
Inspect

Hardware sensor readings (temperatures, voltages, fans). Bare-metal only.

NameRequiredDescriptionDefault
idYesServer ID

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered structurally. The description adds the bare-metal eligibility constraint and the sensor categories, but says nothing about permissions, rate limits, or what a caller gets when sensors are unavailable on the target host.

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

Conciseness5/5

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

Two short clauses, no filler, and the content enumeration is front-loaded ahead of the scoping caveat. Nothing could be trimmed without losing information.

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

Completeness4/5

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 annotation coverage and no output schema, the description supplies the essential distinction (bare-metal) that an agent needs to call it correctly. It stops just short of clarifying behavior on hosts that lack exposed sensors.

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

Parameters3/5

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

Only one parameter (id) exists and the schema documents it fully (100% coverage), so the schema carries the burden. The description adds no format or constraint detail about the id beyond what the schema states, making the baseline 3 appropriate.

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

Purpose4/5

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

States a specific resource (hardware sensor readings) and enumerates the content types (temperatures, voltages, fans), which cleanly distinguishes it from neighbors like get_power_status and get_network_status. It lacks an explicit verb such as 'retrieve', 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.

Usage Guidelines3/5

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

'Bare-metal only' is an effective when-not condition that rules out virtual servers, so the scope is implied. However, it never names an alternative tool or states when a caller would prefer this over get_server or get_power_status, 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.

get_server_tagsB
Read-only
Inspect

All server tags (tags/list). Tags store arbitrary key-value pairs.

NameRequiredDescriptionDefault
idYesServer ID

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds one genuinely useful piece of context — that tags hold arbitrary key-value pairs — but says nothing about ordering, pagination, or the shape of the returned collection.

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

Conciseness4/5

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

Two short sentences with no filler, and the primary purpose is front-loaded ahead of the elaboration. The endpoint parenthetical is marginally useful but slightly technical for a prose description.

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

Completeness3/5

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 should describe what comes back; 'arbitrary key-value pairs' partially covers that but leaves the return structure and empty-state behavior unspecified. Adequate but with visible gaps for a retrieval tool.

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

Parameters3/5

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

Schema coverage is 100% with a single documented 'id' (Server ID) parameter, so the schema carries the meaning. The description never references the required server id, adding no semantics beyond the schema — baseline 3 applies.

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

Purpose4/5

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

States a specific resource ('server tags') and scope ('all'), and the parenthetical endpoint ('tags/list') anchors the operation. It is distinguishable from siblings like search_servers_by_tag or get_server, though it never explicitly names them, so it lands 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.

Usage Guidelines2/5

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 alternatives such as search_servers_by_tag (which searches servers by tag) or get_server. The only contextual cue is the raw endpoint name, which assumes the reader already knows the API surface.

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

get_snapshotsC
Read-only
Inspect

List virtual machine snapshots (vm/get_snapshot): name, snapshot_id, date.

NameRequiredDescriptionDefault
idYesVirtual machine ID

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds essentially nothing behavioral beyond that: no pagination, ordering, volume, or permission context, and no statement of what happens for a VM with no snapshots.

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

Conciseness4/5

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

A single tight sentence with the purpose front-loaded and the return fields listed compactly. It is efficient, though arguably under-specified rather than deliberately minimal.

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

Completeness3/5

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 (name, snapshot_id, date), which is the main thing an agent needs. However it omits pagination, ordering, empty-result behavior, and any routing to the sibling snapshot operations.

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

Parameters3/5

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

Schema coverage is 100% and the single parameter 'id' is documented in the schema as 'Virtual machine ID'. The description adds only the endpoint mapping, not format, range, or error semantics, so the schema does the heavy lifting.

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

Purpose4/5

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

States a specific verb and resource ('List virtual machine snapshots') and even names the underlying API endpoint (vm/get_snapshot), which clearly separates it from the mutating siblings create_snapshot, remove_snapshot and restore_snapshot. It stops short of explicitly naming those alternatives, so it is clear but not sibling-differentiating in prose.

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

Usage Guidelines2/5

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

There is no when-to-use or when-not-to-use guidance. An agent is not told that this is the read path preceding restore_snapshot or remove_snapshot, nor that it requires an existing VM id. The usage context must be inferred 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_stock_serverC
Read-only
Inspect

Details for a specific stock server (stocks/show).

NameRequiredDescriptionDefault
idYesStock server ID from list_stock_servers

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered externally. The description adds only the endpoint mapping '(stocks/show)' and says nothing about return shape, error behavior, or access requirements, so it contributes little 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.

Conciseness4/5

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

A single compact fragment that is front-loaded with the essential information and contains no filler. It is efficient, though the endpoint parenthetical is marginally useful to an agent.

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

Completeness3/5

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

For a simple read-only lookup with full schema coverage and no output schema, the description is minimally adequate. It omits any routing to the list tool or hint about what 'details' includes, leaving a modest gap for an agent deciding between it and list_stock_servers.

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

Parameters3/5

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 fully documented in the schema ('Stock server ID from list_stock_servers'). The description adds no further semantics about the identifier, so the baseline 3 applies.

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

Purpose4/5

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

The description states a specific resource (a specific stock server) and an operation (retrieve details), and the parenthetical '(stocks/show)' pins the underlying endpoint. It implies the singular counterpart to list_stock_servers, but never names that sibling explicitly, so differentiation relies on inference.

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

Usage Guidelines2/5

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 list_stock_servers or any other retrieval sibling, and no prerequisites or exclusions. Usage can only be inferred from the phrase 'a specific stock server' and the schema note that the id comes from list_stock_servers.

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

get_transactionsB
Read-only
Inspect

List of transactions for the client account (whmcs/transactions).

NameRequiredDescriptionDefault
invoice_idNoFilter by invoice
transaction_idNoSpecific transaction

TDQS

B3.4/5.0
Behavior3/5

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

The annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered structurally. The description adds the useful detail that this queries the WHMCS transactions source ('whmcs/transactions'), but says nothing about pagination, result limits, or return shape for a list operation.

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

Conciseness5/5

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

A single compact sentence with zero filler, scoping the resource first. Nothing is wasted and the key qualifier is front-loaded.

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

Completeness4/5

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 two optional filters, no output schema, and annotations covering safety, the description is nearly complete. The only gap is lack of any note on pagination or result volume for the transaction list.

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

Parameters3/5

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

Schema description coverage is 100%, so both optional filters (invoice_id, transaction_id) are already documented in the schema. The description adds no additional format or behavioral 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.

Purpose4/5

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

The description states a clear resource (transactions) and scope ('for the client account'), so an agent knows this is a listing operation over account transactions. It does not, however, distinguish it from adjacent billing siblings like get_invoices, get_credit_history, or get_billing_client, so differentiation is left to inference.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives such as get_invoice or get_credit_history, and no prerequisites or exclusions are stated. Usage must be inferred entirely from the tool name.

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

get_uploaded_isosA
Read-only
Inspect

List ISO images uploaded by the client (iso/uploaded).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful scoping context via the iso/uploaded endpoint, clarifying this returns client-uploaded images only, but says nothing about result volume, filtering, or ordering.

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

Conciseness5/5

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

A single front-loaded sentence with the resource and its scope stated first and the endpoint hint second. No filler and nothing redundant.

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

Completeness4/5

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

For a zero-parameter, read-only listing with no output schema, the description is nearly sufficient. The remaining gap is the absence of any routing cue between this and list_iso_images, which is the main ambiguity an agent faces.

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

Parameters4/5

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 nothing for the description to add or omit on the parameter front.

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

Purpose4/5

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

States a specific verb (List) and a scoped resource (ISO images uploaded by the client), and even names the underlying endpoint (iso/uploaded). It does not distinguish itself from the sibling list_iso_images, so an agent must guess which listing is the right one.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no mention of the closely related siblings list_iso_images, upload_iso, add_iso_image or mount_iso. The scope is implied by the name only, leaving the agent to infer the relationship between 'uploaded' and the general ISO catalog.

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

get_vm_engineC
Read-only
Inspect

Virtualization engine information (vm/get_engine).

NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds nothing beyond restating the API endpoint in parentheses — no scope, freshness, or content of the engine data — so it contributes almost no 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.

Conciseness4/5

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

A single short sentence with the endpoint reference in parentheses; front-loaded and waste-free. It is terse rather than padded, though the parenthetical adds little for an agent.

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

Completeness3/5

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

For a zero-argument read-only tool with no output schema, the description is minimally viable but does not say what the engine information comprises, leaving the agent unable to predict the response. Adequate but with a clear gap.

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

Parameters4/5

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

The tool takes zero parameters, so there is nothing to document and the baseline of 4 applies. The description neither helps nor hurts here.

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

Purpose3/5

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

States the resource ('virtualization engine information') but the verb is weak and it never says what information is returned, nor distinguishes it from the closest sibling get_vm_stats. An agent can tell it is a read of VM engine data, but not what that data is.

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

Usage Guidelines2/5

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

No when-to-use guidance and no mention of alternatives among the many VM/console siblings (get_vm_stats, get_vnc_console, etc.). Usage must be inferred 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_vm_statsC
Read-only
Inspect

Virtual machine statistics (vm/load_stats).

NameRequiredDescriptionDefault
idYesVirtual machine ID

TDQS

C2.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered, but the description adds nothing beyond a raw endpoint reference. It does not disclose what statistics are returned, their freshness, or any rate-limit/polling behavior — the parenthetical is a restatement of the API route, not 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.

Conciseness3/5

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

It is a single short fragment with no waste, but it is undersized rather than efficiently front-loaded — the endpoint parenthetical occupies space that could have carried meaningful scope information.

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

Completeness3/5

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

For a one-parameter read-only tool with annotations covering the safety profile and full schema coverage, the minimum is met. What is missing is any indication of the returned statistics (no output schema exists), which matters most for a 'stats' tool.

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

Parameters3/5

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

Schema description coverage is 100% with a single required 'id' parameter already documented as 'Virtual machine ID'. The description adds no format, range, or acquisition guidance 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.

Purpose3/5

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

The description names a specific resource (virtual machine statistics) and implies retrieval, and the endpoint path (vm/load_stats) narrows it further. However, it never states the verb explicitly nor what 'statistics' means, so an agent cannot tell it apart from siblings like get_vm_engine or get_snapshots without guessing.

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

Usage Guidelines2/5

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, what prerequisites exist, or which sibling to prefer for related VM data (get_vm_engine, get_power_status, get_server_sensors). The agent is left to 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_vnc_consoleA
Read-only
Inspect

Access the server VNC console (eq/console): returns console.vv config in Base64 for virt-viewer.

NameRequiredDescriptionDefault
idYesServer ID

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds valuable behavioral detail beyond that: the exact return format ('console.vv config in Base64') the agent will receive, which is meaningful 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.

Conciseness5/5

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

A single front-loaded sentence with zero filler; the action, the endpoint, and the return type all appear without waste.

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

Completeness4/5

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

For a one-parameter read tool, the description covers purpose and return format well. It does not mention prerequisites (e.g., server power state) that would condition a successful call, but against annotations and the fully documented schema it is largely adequate.

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

Parameters3/5

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 'Server ID'. 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.

Purpose4/5

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

States a specific verb and resource ('Access the server VNC console') and immediately names the return artifact ('console.vv config in Base64 for virt-viewer'). This is far more specific than a tautology, though it does not explicitly distinguish itself from the console sibling start_novnc.

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

Usage Guidelines3/5

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

The phrase 'for virt-viewer' implicitly signals the usage context (native VNC client rather than a browser console), but there is no explicit when-to-use/when-not guidance and start_novnc is never named as the alternative for browser-based access.

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

list_api_keysB
Read-only
Inspect

List all account API keys (api_keys/list).

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, covering the safety profile. The description adds nothing beyond the raw endpoint string 'api_keys/list' – no mention of pagination, result volume, or permissions, which is the kind of context that would earn credit here.

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

Conciseness5/5

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

A single short sentence with zero waste, front-loading the action and resource. The endpoint reference is a compact addition rather than filler.

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

Completeness3/5

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

For a simple parameterless read tool with no output schema, the description is nearly sufficient, but it omits any indication of return shape or pagination behavior, which an agent cannot recover from the absent output schema.

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

Parameters4/5

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

The tool takes zero parameters, so per the baseline there is nothing for the description to clarify. The schema is empty and fully covered.

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

Purpose4/5

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

States a specific verb and resource ('List all account API keys'), and the 'account' qualifier implicitly separates it from the sibling list_server_api_keys. However, it never explicitly contrasts the two, so the distinction relies on the agent inferring from the scope word.

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

Usage Guidelines3/5

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

Usage is only implied by the 'account' scoping; there is no statement about when to prefer this over list_server_api_keys or get_api_key / get_api_key_history. Adequate but with a clear missing routing hint.

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

list_dns_domainsB
Read-only
Inspect

List all user domains from the domains table (pdns/list_domains).

NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description's only extra content is the internal source ('domains table (pdns/list_domains)'), which is implementation detail rather than behavior; it says nothing about pagination, result size, auth scope, or filtering.

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

Conciseness4/5

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

A single short sentence with the action front-loaded and no filler. The parenthetical endpoint reference is marginal value for an agent but costs almost nothing in length.

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

Completeness4/5

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 and annotations covering the safety profile, the description is essentially sufficient. The remaining gap is not clarifying how this list differs from list_dns_zones/list_dns_subdomains.

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

Parameters4/5

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 compensate for. Baseline applies; the description cannot and need not explain parameter semantics.

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

Purpose4/5

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

States a specific verb and resource ('List all user domains') and even names the backing table/endpoint, so the action is unambiguous. However, it does not distinguish itself from close siblings such as list_dns_zones or list_dns_subdomains, leaving the domains-vs-zones boundary for the agent to infer.

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

Usage Guidelines2/5

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 pointer to alternatives despite several overlapping DNS listing tools in the sibling set. The agent gets no signal about which listing tool applies to which situation.

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

list_dns_subdomainsC
Read-only
Inspect

List subdomains by server ID (pdns/list_subdomains).

NameRequiredDescriptionDefault
server_idYesServer ID

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds nothing behavioral beyond that — no note on pagination, ordering, 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.

Conciseness4/5

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

A single tightly-scoped sentence that is front-loaded with the action and resource, and the parenthetical method reference is compact. Nothing is padded, though it is arguably under-specified rather than truly concise.

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

Completeness3/5

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

For a read-only single-parameter list tool with full schema coverage the description is minimally adequate, but with no output schema it still omits return shape and pagination expectations that an agent would need to consume results correctly.

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

Parameters3/5

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 (server_id), so the schema carries the burden. The description's 'by server ID' adds no meaning beyond the schema's own 'Server ID' entry, making the baseline 3 correct.

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

Purpose4/5

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

States a specific verb (List) and resource (subdomains) scoped by server ID, plus the underlying API method. It is distinguishable in principle from siblings like list_dns_domains, but it never names those siblings or clarifies the subdomain-vs-domain boundary.

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

Usage Guidelines2/5

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

There is no guidance on when to choose this tool over list_dns_domains, get_dns_zone, or the add/edit/delete subdomain siblings. Usage is only implied by the noun 'subdomains'.

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

list_dns_zonesA
Read-only
Inspect

List all DNS zones on the account on Hostkey PowerDNS servers (pdns/list_zones).

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the backend context (Hostkey PowerDNS servers, pdns/list_zones), but says nothing about result size, pagination, or whether zones include their records.

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

Conciseness5/5

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

A single front-loaded sentence with no filler; the resource and scope come first and the endpoint reference is parenthetical. Every clause earns its place.

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

Completeness4/5

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

For a zero-parameter, read-only list tool with no output schema, the description gives enough to call it correctly. It could be more complete by clarifying how zones relate to the domain/subdomain listing tools, but nothing essential is missing.

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

Parameters4/5

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 burden to carry and the schema is trivially complete. The description's mention of account scope is consistent with the empty input schema.

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

Purpose4/5

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

States a specific verb and resource ('List all DNS zones on the account') and narrows the scope to Hostkey PowerDNS servers, even citing the backing endpoint (pdns/list_zones). It is clear on its own, though it does not explicitly distinguish itself from nearby siblings like list_dns_domains, list_dns_subdomains, or 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.

Usage Guidelines2/5

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

There is no guidance on when to use this versus list_dns_domains, get_dns_zone, or list_dns_subdomains, nor any stated prerequisites or exclusions. The agent must infer the intended use 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_iso_imagesA
Read-only
Inspect

List available ISO images (iso/list_iso). InvAPI requires a server id (for client keys); images are matched to the server configuration.

NameRequiredDescriptionDefault
idYesServer ID in InvAPI (required)

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely non-obvious behavior: results are server-specific and matched to the server configuration rather than being a global catalog, and it flags the InvAPI client-key requirement. Return shape/pagination is not covered, but that is minor for a read-only listing.

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

Conciseness4/5

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

Two short sentences, front-loaded with the verb+resource, followed by the key constraint. No filler or repetition of the title, though the parenthetical endpoint reference is somewhat redundant.

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

Completeness4/5

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 no output schema and full annotation coverage, the description provides enough: what it lists, the required input, and the server-scoped matching behavior. Only the absence of sibling differentiation and return-format hints keeps it from being fully complete.

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

Parameters3/5

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

Schema coverage is 100% and the sole parameter 'id' is already documented as 'Server ID in InvAPI (required)'. The description adds only the rationale ('for client keys') and the matching behavior, which is marginal value beyond the schema. 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.

Purpose4/5

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

States a specific verb+resource ('List available ISO images') and even names the underlying API endpoint (iso/list_iso). It does not distinguish this tool from nearby siblings like get_uploaded_isos, list_os, or list_presets, so an agent must infer the 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.

Usage Guidelines3/5

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

The description notes a precondition ('InvAPI requires a server id') and that images are matched to the server configuration, which implies when the tool is applicable. However, it never states when to use this versus get_uploaded_isos or mount_iso, and gives 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_osA
Read-only
Inspect

Operating systems available for a preset/server (os/list). Without instance_id returns OS for all presets. No token required.

NameRequiredDescriptionDefault
instance_idNoPreset ID from list_presets

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuinely new behavioral context: 'No token required' (auth requirement) and the scope-switching behavior of instance_id, which 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.

Conciseness5/5

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

Three short sentences, all front-loaded and information-dense: resource, endpoint, conditional behavior, and auth note. No filler or redundancy.

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

Completeness4/5

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

For a single-optional-parameter read tool with no output schema, the description covers scope, the global-fallback behavior, and auth requirements. Only the return shape is unstated, which is acceptable given no output schema exists.

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

Parameters4/5

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

Schema coverage is 100% and already documents instance_id as 'Preset ID from list_presets', so baseline is 3. The description adds meaning beyond the schema by explaining what omitting the optional parameter does (returns OS for all presets), clarifying the semantics of its optionality.

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

Purpose4/5

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

States a specific verb+resource: operating systems available for a preset/server, and even maps it to the raw endpoint (os/list). It is distinguishable from siblings like list_presets and list_software, though it never names an alternative explicitly.

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

Usage Guidelines3/5

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

The conditional 'Without instance_id returns OS for all presets' implies the two usage modes (scoped vs. global), but there is no explicit when-to-use guidance or reference to sibling tools such as list_presets or list_software.

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

list_post_install_tasksA
Read-only
Inspect

Available post-install Ansible tasks (jenkins/get_tasks) with applicability tags: gpu, bm, vm, vgpu, default. Without a token — general list; with a token — tasks available to the specific user.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds real value beyond them by enumerating the applicability tags (gpu, bm, vm, vgpu, default) and disclosing that the result set is scoped by whether a token is supplied.

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

Conciseness4/5

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

Two short sentences, front-loaded with what the tool returns, then the tag vocabulary and the token-scoping rule. No filler; the parenthetical API path is the only marginally expendable detail.

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

Completeness4/5

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

For a zero-parameter read-only listing tool with no output schema, the description supplies the important context an agent needs: the tag taxonomy and the user-scoping behavior. It stops short of describing the item shape returned, but that gap is small.

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

Parameters4/5

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 and the baseline is 4. The token/scope note actually anticipates the auth-context variation that the empty schema cannot express.

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

Purpose4/5

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

States a specific verb+resource (list available post-install Ansible tasks) and even names the backing operation (jenkins/get_tasks), so the agent knows exactly what is returned. It does not explicitly name the complementary sibling run_post_install_task, though the list/run distinction is hard to confuse.

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

Usage Guidelines3/5

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

It explains a behavioral condition — token present vs absent changes the scope of the list — which is useful context, but never says when to call this versus run_post_install_task or other discovery tools. Usage is only implied from the name and scope note.

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

list_preset_groupsB
Read-only
Inspect

Preset groups for catalog categories (presets/groups). No token required.

NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safe-read profile is known without the text. The description adds a genuinely useful auth detail ('No token required'), which is not conveyed by the annotations and matters for callers deciding whether to authenticate.

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

Conciseness4/5

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

A single compact sentence with the resource front-loaded and the endpoint and auth note appended. It wastes no words, though the phrasing is terse enough to be slightly cryptic about what a 'preset group' actually is.

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

Completeness3/5

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

For a no-param read-only listing tool with annotations covering the safety profile and no output schema, the description is minimally adequate. It omits any indication of what the returned group objects contain or how they relate to presets, which would help an agent choose among the preset siblings.

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

Parameters4/5

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; per the baseline rule this scores 4. No parameter guidance is needed or missing.

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

Purpose3/5

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

Identifies the resource ('preset groups for catalog categories') and even names the underlying endpoint ('presets/groups'), but the verb is implicit and it never distinguishes this from the closely related siblings list_presets, get_preset, and search_presets. An agent can guess this is a listing endpoint, but the distinction from list_presets is left to inference.

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

Usage Guidelines2/5

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 list_presets or the other preset tools, and no prerequisites or exclusions. The only guidance is the parenthetical endpoint path, which describes location rather than selection criteria.

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

list_presetsA
Read-only
Inspect

Current list of available instant servers (VM/BM/GPU/vGPU) with prices for a location. No token required. Use to pick a preset before ordering.

NameRequiredDescriptionDefault
locationYesLocation: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds real behavioral context beyond them: 'No token required' (auth requirements) and 'Current' (freshness of the listing), which are useful for an agent deciding whether it can call this anonymously.

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

Conciseness5/5

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

Two tight sentences, front-loaded with the resource and its scope, followed by the usage cue. Every clause carries information; nothing is padding.

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

Completeness4/5

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, the description is nearly sufficient: it explains what the list contains and when to use it. Minor omissions (return shape/pagination) are acceptable since no output schema exists but the tool's nature is a straightforward listing.

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

Parameters3/5

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

With a single parameter at 100% schema coverage, the schema already documents location and its allowed values. The description contextualizes that a location drives both availability and pricing, but adds no syntax or format 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.

Purpose4/5

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

States a specific verb+resource ('list presets') and enriches it with the domain ('instant servers (VM/BM/GPU/vGPU) with prices for a location'), so the agent knows exactly what comes back. It does not explicitly distinguish itself from the sibling search_presets, 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.

Usage Guidelines4/5

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

'Use to pick a preset before ordering' gives clear when-to-use context tied to the ordering workflow. It offers no explicit when-not-to-use or named alternative, so it lands at a solid 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.

list_rhr_requestsA
Read-only
Inspect

List Remote Hands requests with filtering by location and status (rhr/list).

NameRequiredDescriptionDefault
statusNoFilter by request status
locationNoFilter by location, e.g. NL

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so the read-only safety profile is covered structurally. The description adds only the endpoint codename '(rhr/list)' and the filterability, with no return shape, pagination, or default-behavior detail, so it adds light context rather than meaningful transparency.

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

Conciseness5/5

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

A single front-loaded sentence with the action first, then the filter scope, then the endpoint hint. Nothing is wasted and no filler is present.

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

Completeness4/5

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

For a parameterless-required, read-only list tool with full schema coverage and annotations covering the safety profile, the description supplies enough to call it correctly. The absence of return-format detail is acceptable since there is no output schema, though it leaves the agent slightly under-informed about result shape.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters (status, location) are documented in the schema, including the 'NL' example. The description adds nothing beyond echoing what the schema already defines, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('List Remote Hands requests') and describes the filtering axes ('location and status'), which clearly distinguishes it from the create/discard/comment RHR siblings. However, it does not explicitly name any sibling to route between, 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.

Usage Guidelines3/5

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

The mention of filtering by location and status implies the retrieval context, but there is no explicit when-to-use guidance, no statement of when not to use it versus get_single_request-style siblings, and no prerequisites. Usage is only inferable.

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

list_server_api_keysA
Read-only
Inspect

List API keys issued for a specific server (api_keys/list_for_server).

NameRequiredDescriptionDefault
server_idYesServer ID

TDQS

A3.8/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true and openWorldHint=true, so the read-only safety profile is covered. The description confirms the read operation and adds the server-scoping constraint, but says nothing about pagination, sorting, or auth requirements beyond what annotations provide.

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

Conciseness5/5

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

A single, front-loaded sentence with zero filler; the verb and scope appear immediately and the endpoint reference is short and useful.

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

Completeness4/5

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 one fully documented parameter and annotations carrying the safety profile, the description is adequate. It could optionally clarify the difference from list_api_keys, but nothing essential to invocation is missing.

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

Parameters3/5

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

Schema description coverage is 100% for the single parameter (server_id), so the schema already documents it. The description's mention of 'a specific server' only restates the parameter's purpose and adds no format or syntax detail beyond the schema.

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

Purpose5/5

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

The description gives a specific verb ('List') and resource ('API keys') plus the scope ('issued for a specific server'), which cleanly distinguishes it from the broader list_api_keys and the single-item get_api_key. The parenthetical endpoint (api_keys/list_for_server) reinforces exactly what operation is performed.

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

Usage Guidelines3/5

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

The phrase 'for a specific server' implies the usage context, but there is no explicit when-to-use guidance or named alternative (e.g., list_api_keys for all keys vs. this tool for server-scoped keys). Usage is inferable but left implicit.

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

list_softwareB
Read-only
Inspect

Software (marketplace apps) available for auto-install (software/list). No token required.

NameRequiredDescriptionDefault
locationNoLocation: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH
instance_idNoPreset ID from list_presets

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and openWorldHint=true, so read-only semantics are covered. The description does add one piece of behavior annotations do not cover: 'No token required', which is genuinely useful auth context for an agent deciding whether it can call this before authenticating. It says nothing about pagination, result size, or whether the list is region-filtered.

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

Conciseness4/5

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

Very short and front-loaded, with the resource named first and the auth caveat trailing. The '(software/list)' parenthetical is endpoint trivia of dubious value to an agent, which is the only real slack in otherwise tight phrasing.

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

Completeness3/5

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

For a two-optional-parameter read tool with no output schema, the description covers what the tool returns conceptually (available software) and its auth posture. It stops short of explaining how location and instance_id combine to filter results or what happens when both are omitted, leaving a meaningful gap for a listing endpoint.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (location with its enum-like country list, instance_id referencing list_presets) are already documented in the schema. The description adds no additional parameter meaning, so the baseline of 3 applies.

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

Purpose4/5

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

The description identifies the resource precisely (marketplace apps available for auto-install) and implicitly the verb via the tool name 'list', so it is distinguishable from siblings like list_os or list_presets. It does not explicitly contrast itself with any sibling, but the scope qualifier 'available for auto-install' does the disambiguating work well.

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

Usage Guidelines2/5

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 list_presets, list_os, list_traffic_plans, or the other catalog-listing siblings. The only contextual hint is the parenthetical endpoint and 'No token required', which tells the agent about auth but not selection conditions.

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

list_stock_serversA
Read-only
Inspect

Available stock servers (physical servers of standard configs; deploy within a business day). No token required.

NameRequiredDescriptionDefault
groupYesServer group; GPU servers are not included in other groups
locationYesLocation: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds two pieces of genuinely useful context that annotations do not carry: the auth situation ('No token required') and the provisioning-time behavior of the returned inventory. It stops short of describing return format or pagination.

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

Conciseness5/5

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

A single compact sentence front-loads the resource, then qualifies it with the two facts that matter (what they are, how fast they deploy) and the auth note. No filler.

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

Completeness4/5

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

For a two-parameter, read-only list tool with full schema coverage and no output schema, the description supplies the domain context and auth note an agent needs. It would be stronger if it hinted at the result shape or how to follow up (e.g., ordering from a returned stock server).

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

Parameters3/5

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

Schema description coverage is 100% — the group enum and location codes are fully documented in the schema, including the note that GPU servers are excluded from other groups. 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.

Purpose4/5

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

States a specific resource ('Available stock servers') and enriches it with a precise definition — physical servers of standard configs that deploy within a business day. This clearly separates it from get_stock_server (singular lookup) and get_servers (already-owned servers), though it never names those siblings explicitly.

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

Usage Guidelines3/5

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

The 'deploy within a business day' parenthetical implies the use case (finding quickly provisionable hardware), but there is no explicit when-to-use/when-not statement and no alternative tool is named. 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_traffic_plansA
Read-only
Inspect

Available traffic plans for a preset in a location (traffic_plans/list). No token required.

NameRequiredDescriptionDefault
locationYesLocation: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH
instance_idYesPreset ID from list_presets

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, and the description adds a genuinely useful behavioral fact not present in structured data: 'No token required.' It still says nothing about pagination or result ordering, but the auth disclosure is real added value on top of 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.

Conciseness5/5

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

Two short sentences, resource and scope front-loaded, endpoint cited compactly, no filler. Nothing could be cut without losing information.

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

Completeness3/5

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

For a simple two-parameter read-only list tool with no output schema, the definition is workable but silent on what a traffic plan contains (fields, units, whether multiple plans are typically returned). With no output schema to fall back on, a brief note on the result shape would have made it complete.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters (location with its country-code list, instance_id as a preset ID) are fully documented in the schema. The description only restates that the plans are 'for a preset in a location', adding 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.

Purpose4/5

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

Names a specific resource (traffic plans) with two scoping dimensions (preset, location) and even cites the underlying endpoint. It is distinguishable from the similar-sounding s3_list_plans (object-storage plans), 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.

Usage Guidelines2/5

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 versus alternatives, nor any prerequisite ordering (e.g. 'call list_presets first to obtain instance_id'). The only implied guidance is the parenthetical endpoint reference.

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

logoutA
Idempotent
Inspect

End the current API session (auth/logout): session token is removed from InvAPI. On the next call the client will sign in again with the API key.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, idempotentHint=true, destructiveHint=false), the description discloses the actual mechanism: the session token is removed from InvAPI, and re-authentication happens automatically on the next call. This clarifies that the operation mutates client session state but is self-recovering, which is exactly the kind of context annotations cannot convey. It stops short of mentioning failure modes or permissions.

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

Conciseness5/5

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

Two tight sentences with no filler. The primary effect is front-loaded, and the recovery behavior follows as supporting detail.

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

Completeness4/5

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

For a zero-parameter tool with no output schema, the description covers the essential effect and the post-call recovery path. The only unaddressed area is error behavior (e.g., logging out with no active session), which is minor for a tool this simple.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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; the baseline of 4 applies. No parameter information is missing or misleading.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'End the current API session' with the underlying endpoint '(auth/logout)'. No sibling in the list performs session termination, so the agent can identify it immediately and unambiguously.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description makes the use case clear (terminate the session) and explains the follow-on behavior that informs the decision: 'On the next call the client will sign in again with the API key.' There are no alternative session tools to disambiguate against, so no explicit exclusions are needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mass_payCInspect

Create a group invoice to pay multiple invoices at once (whmcs/mass_pay). MONEY.

NameRequiredDescriptionDefault
confirmYesMust be true to run the operation.
invoicesYesArray of invoice numbers

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true, and destructiveHint=false. The description adds no behavioral context beyond restating the operation: it does not explain financial consequences, required permissions, the role of confirm=true (only in schema), or the outcome of paying invoices. The cryptic 'MONEY.' tag is unhelpful rather than informative.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The main sentence is concise and front-loaded. However, the trailing 'MONEY.' is noise that does not earn its place and adds no actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a financial mutation tool with no output schema, the description is too sparse. It omits critical context such as what happens to funds, whether the operation is immediate or batch-queued, and any failure modes. Annotations cover the safety profile only at a high level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are fully documented in the input schema. The description adds no meaning beyond what the schema provides—it does not clarify invoice number format or what confirm actually controls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Create a group invoice' with the purpose 'to pay multiple invoices at once'. This distinguishes it from read-oriented billing siblings like get_invoice and get_invoices. However, it does not explicitly name an alternative or differentiate from similar mutation tools like apply_credit or create_addfunds_invoice.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives, no exclusions, and no prerequisites described. The phrase 'at once' implies a bulk-payment context but does not tell an agent when mass_pay is preferred over other billing operations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mount_isoAInspect

Mount an ISO image on a server (iso/mount_iso). Async operation. Callback key returned — track with check_task. InvAPI expects iso (name or id). Pass iso, or name / iso_id aliases.

NameRequiredDescriptionDefault
idYesServer ID
isoNoISO name or id (InvAPI field `iso`)
nameNoAlias: image name / iso_name → iso
iso_idNoAlias: image ID from list_iso_images → iso
confirmYesMust be true to run the operation.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, destructiveHint=false, openWorldHint=true), the description discloses that the operation is asynchronous and returns a callback key for polling via check_task — genuinely useful behavior an agent cannot infer from annotations. It doesn't describe failure modes or preconditions (e.g., ISO must exist).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the verb and resource, then async behavior, then parameter hints — no filler. The final alias sentence partially repeats the schema and could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the two things an agent most needs for a mount operation: that it's async and how to follow up. With no output schema, the callback-key note substitutes adequately; only preconditions and error behavior remain undocumented.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents id, iso, name, iso_id and confirm. The description restates the InvAPI field name and alias mapping, adding only marginal clarification about which parameter takes precedence.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Mount an ISO image on a server') and even names the API path iso/mount_iso. It doesn't explicitly contrast with the sibling unmount_iso, 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Tells the agent this is async and that the returned callback key should be tracked with check_task, which is actionable context. It stops short of stating when not to use it (e.g., when an ISO is already mounted, or to use unmount_iso instead).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

order_serverAInspect

Order an instant or stock server (eq/order_instance). IMPORTANT: ordering charges the credit balance or creates an invoice. Defaults to dry_run=true — only checks preset/OS availability and returns a summary without placing an order. For a real order pass dry_run=false and confirm=true after explicit user consent on the cost. Deploy takes 10–30 minutes; status via check_task.

NameRequiredDescriptionDefault
os_idYesOS ID from list_os
own_osNo1 — do not install OS (manual install)
presetYesPreset ID or name from list_presets (e.g. 108 or vm.pico)
confirmNoRequired (=true) for a real order
dry_runNoDefault true: validate parameters without placing an order or charging
soft_idNoSoftware ID from list_software (optional)
ssh_keyNoPublic SSH key for root
hostnameNoHostname; default is generated from location and ID
promocodeNoDiscount promocode
root_passYesRoot password: min. 8 chars, uppercase, digit, special char (not @ or #)
traffic_planYesTraffic plan ID from list_traffic_plans
deploy_notifyNoEmail notification when deploy finishes (recommended true)
deploy_periodYesBilling period
location_nameYesLocation: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH
post_install_scriptNoScript run after deploy
post_install_callbackNoCallback URL after deploy

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare the generic profile (not read-only, open-world, non-idempotent, non-destructive); the description adds the critical consequence — charging the credit balance or creating an invoice — plus the dry-run default, the confirmation gate, and the 10–30 minute deploy window. This is exactly the 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Five sentences, front-loaded with the cost warning, and every clause earns its place: scope, charge consequence, dry-run default, real-order recipe, deploy timing. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 16-parameter, high-stakes ordering tool with no output schema, the description covers the safety-critical asymmetry (validate vs. charge), the consent prerequisite, and where to check progress. Nothing an agent needs to avoid an unintended purchase is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 by explaining the interaction between dry_run and confirm and the cost implication attached to them. It doesn't touch the other 14 parameters, but those are already fully documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (order) and resource (instant or stock server) and even names the underlying endpoint (eq/order_instance). An agent can immediately distinguish it from siblings like list_presets, get_stock_server, or create_reinstall_task.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly prescribes the safe path (default dry_run=true validates without charging), the condition for a real order (dry_run=false AND confirm=true after explicit user consent on cost), and the follow-up for status (check_task). No inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

port_offA
Destructive
Inspect

Disable a server network port (net/port_off). DESTRUCTIVE: the server will lose network connectivity on this interface.

NameRequiredDescriptionDefault
idYesServer ID
portYesPhysical switch port from get_network_status
confirmYesMust be true to run the operation.

TDQS

A3.6/5.0
Behavior4/5

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. The description earns credit by adding the concrete consequence — the server loses network connectivity on that interface — which is more actionable than a generic destructive flag. It stops short of stating reversibility or the confirm gate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with zero waste, front-loading the action and immediately following with the risk warning. Nothing could be removed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 safety annotations plus the connectivity-loss warning cover the essentials, and the confirm requirement lives in the schema. Adding reversibility (use port_on to restore) would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters (id, port, confirm) are already documented in the schema. The description adds no syntax or format detail beyond that, 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Disable) and resource (server network port), with the underlying API operation (net/port_off) in parentheses. It is clearly distinguishable from sibling port_on by semantics, though it never names the opposite operation explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of the counterpart port_on, and no stated prerequisites (e.g. that confirm must be true or that the port comes from get_network_status). The purpose implies the usage but nothing routes the agent among alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

port_onCInspect

Enable a server network port (net/port_on).

NameRequiredDescriptionDefault
idYesServer ID
portYesPhysical switch port from get_network_status
confirmYesMust be true to run the operation.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=true, and the description's 'Enable' is consistent with them. Beyond that it adds nothing behavioral — no note that toggling a port can disrupt network connectivity, no mention of the confirm gate's purpose, no side-effect disclosure. With annotations covering only the safety flag, more context was warranted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short, front-loaded sentence with no padding, which is appropriate for a simple toggle. It loses a point only because the redundant '(net/port_on)' parenthetical occupies space without informing the agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The operation is simple and the schema and annotations cover parameters and safety, but the description omits the operational context an agent needs — relationship to port_off, where the port string comes from, and disruption risk. Adequate but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the id, port, and confirm parameters are fully documented in the schema itself. 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Enable) and resource (server network port), which is clear enough to distinguish it from read tools like get_network_status. However, it does not name or contrast the obvious sibling port_off, and the parenthetical '(net/port_on)' merely restates the tool name rather than adding scope information.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of the complementary port_off tool, and no note that the port argument should come from get_network_status (that hint only lives in the schema). The agent gets no routing context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

power_offA
Destructive
Inspect

Power off a server (eq/off). DESTRUCTIVE: interrupts all services on the server. Requires confirm=true. Async: response includes a callback key for check_task.

NameRequiredDescriptionDefault
idYesServer ID
confirmYesRequired confirmation. Without confirm=true the call is rejected.

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=false, but the description adds substantial value beyond them: it spells out the consequence ('interrupts all services'), the mandatory confirmation gate, and the async nature with a callback key for check_task. This tells the agent exactly what will be destroyed and how to 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences, front-loaded with the action and the destructive warning. Every clause carries actionable information (API op, destructiveness, confirmation requirement, async follow-up) with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no output schema, the description covers the safety profile, the confirmation prerequisite, and the asynchronous follow-up mechanism via check_task. An agent has everything needed to invoke it correctly and handle the response.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 in the schema (id as Server ID, confirm as required). The description reinforces that confirm=true is mandatory but adds no new syntax, format, or edge-case detail 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Power off a server') with the underlying API operation '(eq/off)'. The action is clearly distinct from siblings like power_on, reboot_server, and request_rh_power_off without needing to open their schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description supplies useful prerequisites ('Requires confirm=true') and a strong warning that it 'interrupts all services', which implicitly steers the agent away from casual use. However, it never explicitly states when to choose this over alternatives such as reboot_server or power_on, 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.

power_onA
Idempotent
Inspect

Power on a server (eq/on). Async: response includes a callback key for check_task.

NameRequiredDescriptionDefault
idYesServer ID
confirmYesRequired confirmation. Without confirm=true the call is rejected.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly=false, destructive=false, idempotent=true), and the description adds genuinely new behavioral context: the call is asynchronous and the response carries a callback key to be polled via check_task. It stops short of saying how long the operation takes or what the callback key looks like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two terse sentences, action and async follow-up front-loaded, zero filler. 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.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter mutation with no output schema, the description covers what the annotations cannot: the async nature and the check_task polling path. Only minor gaps remain (server-state preconditions, rough operation latency).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (id, confirm) are already documented in the schema, including the confirm=true rejection rule. 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Power on a server') with the underlying API action (eq/on), which clearly separates it from power_off and reboot_server. It does not, however, disambiguate against the other power-related siblings in the list (request_rh_power_on, port_on), which an agent can only resolve by opening the other schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: the async note tells the agent it must follow up with check_task, but there is no statement of when to choose this over reboot_server, request_rh_power_on, or port_on, nor any preconditions (e.g. server state) for calling it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reboot_serverA
Destructive
Inspect

Reboot a server (eq/reboot). Interrupts services during reboot. Requires confirm=true. Async: response includes a callback key for check_task.

NameRequiredDescriptionDefault
idYesServer ID
confirmYesRequired confirmation. Without confirm=true the call is rejected.

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and non-idempotency, so the safety profile is covered structurally. The description adds real context beyond that: the service interruption during reboot and the asynchronous callback-key/check_task pattern, which 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences with the action, the risk, the required flag, and the async contract front-loaded in that order. No filler, no repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 explains that the response carries a callback key for check_task, closing the async loop. It is complete enough to invoke correctly, missing only the sibling-routing decision (RH vs standard reboot).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both id and confirm are documented in the schema itself, including the rejection behavior for confirm. The description restates the confirm=true requirement without adding format or semantics beyond it, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Reboot a server') and even maps it to the underlying endpoint (eq/reboot), so the action is unambiguous. It does not differentiate from the near-siblings request_rh_reboot or the power_on/power_off family, leaving the agent to infer which reboot path applies to which server type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states the hard precondition ('Requires confirm=true') and routes the async follow-up to check_task, which is genuinely actionable. However it offers no when-to-use vs request_rh_reboot/power_off guidance and no when-not conditions, so alternative selection is only implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reinstall_serverA
Destructive
Inspect

Reinstall OS on an existing server (simplified path via eq/order_instance with id). DESTRUCTIVE: all disk data will be erased. Requires HOSTKEY_ALLOW_DESTRUCTIVE=1 in the server environment, confirm=true, and re-entering the server's current hostname. Async: status via check_task.

NameRequiredDescriptionDefault
idYesServer ID
os_idYesNew OS ID from list_os (0 + own_os=1 — no OS install)
own_osNo1 — do not install OS
confirmYesRequired (=true) to start reinstall
soft_idNoSoftware ID from list_software
ssh_keyNoPublic SSH key for root
hostnameYesCurrent server hostname — confirms the correct server is selected
root_passYesNew root password
deploy_notifyNo
post_install_scriptNo

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well past the destructiveHint annotation by spelling out that all disk data is erased, the required environment flag, the confirm gate, the hostname-matching safeguard, and the asynchronous execution model with check_task polling. This is exactly the extra context an agent needs before firing a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: action first, then the destructive warning, then prerequisites and async handling. No filler, and the riskiest information is surfaced early.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, non-idempotent, no-output-schema tool, the description covers impact, gating requirements, and result-checking path. Nothing material is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 80%, so most parameters are already documented. The description reinforces confirm and hostname semantics but adds little syntax or format detail (e.g., os_id/own_os interaction, ssh_key vs root_pass) beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Reinstall OS on an existing server') and notes the simplified implementation path. It does not explicitly contrast with the sibling create_reinstall_task, but the destructive reinstall action is unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete preconditions for invocation (HOSTKEY_ALLOW_DESTRUCTIVE=1, confirm=true, re-entering the current hostname) and routes to check_task for status. It stops short of stating when to prefer this over create_reinstall_task.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_ipmi_userBInspect

Remove a temporary IPMI user (eq/remove_ipmi_user).

NameRequiredDescriptionDefault
idYesServer ID
confirmYesMust be true to run the operation.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true and destructiveHint=false, so safety profile is largely covered. The description adds the 'temporary' qualifier, which reconciles reasonably with destructiveHint=false (removing a temp account is not data destruction), but it discloses nothing about the confirm gate, permissions, or reversibility.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the purpose is stated immediately. The parenthetical API identifier is the only non-earning element.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a low-complexity two-parameter tool with full schema coverage and annotations covering safety, so the terse description is nearly sufficient. However, a mutating removal tool with a required confirm flag would benefit from one line on prerequisites or the follow-up state.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so 'id' (Server ID) and 'confirm' (must be true to run) are already fully documented in the schema. The description contributes no additional parameter meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Remove a temporary IPMI user') and scopes it to temporary users, which implicitly distinguishes it from the add_ipmi_user sibling. The trailing '(eq/remove_ipmi_user)' is an API-name restatement that adds no selection value.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this versus add_ipmi_user or reset_ipmi, and no stated prerequisites (e.g., an IPMI user must exist, correct server id required). The agent must infer 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.

remove_snapshotA
Destructive
Inspect

Delete a snapshot (vm/remove_snapshot). DESTRUCTIVE: the snapshot is permanently deleted. Deletion is only possible on a powered-off VM.

NameRequiredDescriptionDefault
idYesVirtual machine ID
nameYesSnapshot name
confirmYesMust be true to run the operation.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, so the description is not the sole source of the safety profile. It still adds value beyond them by stressing permanence ("permanently deleted") and the powered-off VM requirement, a state precondition 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact clauses, front-loaded with the action, then the risk, then the precondition. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with full annotation coverage, a fully documented schema, and no output schema, the description supplies exactly the missing pieces: permanence and the powered-off VM precondition. 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.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all three parameters (id, name, confirm) are documented in the schema itself. The description adds no additional meaning about parameter format or the confirm gate, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Delete a snapshot") and even names the underlying API method (vm/remove_snapshot). This clearly separates it from the sibling read/creation tools get_snapshots, create_snapshot, and restore_snapshot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit precondition for use: "Deletion is only possible on a powered-off VM." That is real routing guidance, though it does not name alternative tools (e.g. restore_snapshot) or say when not to delete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_static_natCInspect

Remove static DNAT to the server IPMI (nat/remove_static_nat).

NameRequiredDescriptionDefault
idYesServer ID
confirmYesMust be true to run the operation.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is partly covered. The description adds nothing beyond the verb and API endpoint: it doesn't say whether removal is reversible, what happens to the IPMI mapping afterward, or what the confirm flag guards against. There is no contradiction with annotations, but the description contributes almost no 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence that is front-loaded with the action and resource. The trailing API path is mildly useful reference but borders on filler; the sentence otherwise wastes nothing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter mutation with full schema coverage, no output schema, and annotations covering safety, the description is minimally adequate. It stops short of explaining the effect of the removal or how it relates to the sibling NAT tools, which is the main missing context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 'id' (Server ID) and 'confirm' (must be true to run). The description adds no meaning beyond that, which is the baseline expectation 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: 'Remove static DNAT to the server IPMI', which is unambiguous about the operation. However, it does not distinguish itself from the closely related siblings clear_static_nat, drop_nat, or add_static_nat, leaving the agent to infer the distinction. The API path parenthetical is informational but not differentiating.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no when-to-use or when-not-to-use guidance. Given siblings like clear_static_nat and drop_nat that likely overlap, the absence of any alternative routing is a notable gap. The agent must guess which removal tool applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_cancellationA
Destructive
Inspect

Request service cancellation (whmcs/request_cancellation). DESTRUCTIVE: cancellation_type=1 — immediate cancel with partial refund (if possible), 0 — cancel at end of billing period. Requires HOSTKEY_ALLOW_DESTRUCTIVE=1.

NameRequiredDescriptionDefault
idYesServer ID
confirmYesMust be true to run the operation.
cancellation_typeYes1 — immediate (partial refund if possible), 0 — at end of billing period
terminate_reason_customNoCancellation reason

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint annotation by disclosing the refund consequence ('partial refund if possible'), the two timing behaviors, and the environment prerequisite for enabling destructive calls. This is exactly the operational context an agent needs before invoking an irreversible action.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with no filler; the destructive warning and env prerequisite are front-loaded rather than buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 effect, timing, refund implication, and gating prerequisites. Minor gaps remain (e.g., what confirm/id refer to is left to the schema, and no post-call state is described), but nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the enum values are already documented in the schema, so the description largely restates cancellation_type. Baseline 3 is appropriate; the 'if possible' refund caveat adds only marginal meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Request service cancellation') plus the underlying endpoint (whmcs/request_cancellation), and is clearly distinct from the read-side siblings get_cancellation_requests and delete_cancellation_request.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong preconditions (requires HOSTKEY_ALLOW_DESTRUCTIVE=1) and explains the semantics of each cancellation_type, which tells the agent when each mode applies. It does not, however, explicitly route the agent away from related siblings like delete_cancellation_request.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_rh_checkAInspect

Remote Hands request: check the server and boot it into the OS (jira/request_check). Creates a Remote Hands ticket for the datacenter on-call shift; status and correspondence are in the ticket (link will be emailed).

NameRequiredDescriptionDefault
idYesServer ID
confirmYesMust be true to run the operation.

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare openWorldHint=true and non-read-only/non-destructive, and the description adds meaningful behavior on top: this is an asynchronous, human-mediated workflow where status lives in a ticket and the link arrives via email. That is the kind of out-of-band detail an agent needs and 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight clauses front-load the action, with the internal endpoint reference (jira/request_check) parenthetically tucked away rather than leading. Slightly dense with jargon but no wasted sentences.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 explains the return path (ticket holds status, link emailed) so the agent knows not to expect an immediate result payload. Remaining gap is the absence of any permissions or cost/timing expectations for an open-world request.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both parameters (id = Server ID, confirm = must be true), so the schema already carries the semantics. The description adds nothing about parameter format or the meaning of confirm in this ticket-creation flow, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete action set: check the server and boot it into the OS, framed as a Remote Hands request that creates a datacenter ticket. That is specific enough to separate it from generic reboot/power tools, though it never explicitly contrasts itself with the sibling request_rh_reboot / request_rh_pxe_boot / request_rh_power_on variants.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Describes what happens after the call (ticket created, correspondence in ticket, emailed link) but gives no condition for choosing this over the other request_rh_* tools or over direct power/boot operations. The agent must infer usage from the phrase 'check the server and boot it into the OS' alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_rh_kvmAInspect

Remote Hands request: attach IP KVM to the server (jira/request_kvm). Creates a Remote Hands ticket for the datacenter on-call shift; status and correspondence are in the ticket (link will be emailed).

NameRequiredDescriptionDefault
idYesServer ID
confirmYesMust be true to run the operation.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare a non-destructive write (readOnlyHint=false, destructiveHint=false, openWorldHint=true), but the description adds genuinely useful context: it creates a Remote Hands ticket routed to the datacenter on-call shift, and the status/correspondence live in that ticket with a link emailed. That asynchronous, ticket-driven outcome is not derivable from annotations. It stops short of noting the confirm=true gating behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with no filler, and the core action is front-loaded ahead of the ticket/notification detail. The parenthetical jira/request_kvm is compact rather than redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 fills the return-value gap by explaining that the result is a ticket with a link emailed and correspondence tracked there. The only remaining gap is the confirm=true requirement, which the schema covers adequately.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters (id as Server ID, confirm as a required true flag) are already documented in the schema. The description adds no syntax, format, or constraint detail beyond what is provided there, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (attach IP KVM to the server) and ties it to the underlying jira/request_kvm operation. Within the request_rh_* sibling family (power_on, power_off, reboot, pxe_boot, check) the KVM attachment is unambiguous, so an agent can route here 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied by the purpose: request this when you need IP KVM attached. There is no explicit when-to-use/when-not, no mention that the operation is asynchronous, and no pointer to alternatives such as the generic create_rhr_request or request_rh_check siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_rh_power_offA
Destructive
Inspect

Remote Hands request: power off the server manually (jira/request_poff). DESTRUCTIVE for running services. Creates a Remote Hands ticket for the datacenter on-call shift; status and correspondence are in the ticket (link will be emailed).

NameRequiredDescriptionDefault
idYesServer ID
confirmYesMust be true to run the operation.

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, but the description adds real context beyond them: it is a manual datacenter action, it opens a Remote Hands ticket for the on-call shift, and status/correspondence live in the ticket with a link emailed. It does not cover timing/SLA or whether the server must be reachable first.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, front-loaded with the action and the destructive warning, with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter, no-output-schema tool, the description covers what triggers it, where the outcome is tracked, and the destructive consequence. It lacks only explicit routing guidance versus the self-service power_off sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both id and confirm, so the schema already carries the semantics. The description adds nothing about parameter format or values, which is the expected baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('power off the server manually') and the channel ('Remote Hands request', jira/request_poff), which cleanly separates it from the self-service power_off and from sibling Remote Hands tools like request_rh_reboot and request_rh_power_on.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'manually' and the ticket-creation detail imply this is for cases where the datacenter on-call must physically act, but the description never explicitly says when to choose this over power_off or request_rh_reboot. Usage is inferable but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_rh_power_onAInspect

Remote Hands request: power on the server manually (jira/request_pon). Creates a Remote Hands ticket for the datacenter on-call shift; status and correspondence are in the ticket (link will be emailed).

NameRequiredDescriptionDefault
idYesServer ID
confirmYesMust be true to run the operation.

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnlyHint=false, destructiveHint=false, openWorldHint=true), and the description adds genuinely new behavior: it creates a Remote Hands ticket for the datacenter on-call shift, that status/correspondence live in the ticket, and that a link is emailed. That is meaningful context a caller 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences plus a parenthetical identifier; the core action leads and the ticket/link behavior follows. No filler, though the parenthetical jumps registry-style detail slightly ahead of the conversational flow.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter ticket-creating tool with no output schema, the description sufficiently explains what happens after invocation (ticket, status there, emailed link). It stops short of stating timing, permissions, or what to do if the request fails, but nothing essential to invoking is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% ('Server ID', 'Must be true to run the operation'), so both parameters are already documented. The description adds no syntax, format, or interpretation beyond the schema, matching the baseline for full coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('power on the server manually') and names the underlying mechanism ('Remote Hands request ... jira/request_pon'). This distinguishes it from the sibling power_on (automated API power) and request_rh_power_off by making the manual/Remote-Hands nature explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'power on the server manually' and the Remote Hands framing, but the description never explicitly routes the agent between this and the sibling power_on, nor states prerequisites or when manual intervention is required. Context is inferable but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_rh_pxe_bootAInspect

Remote Hands request: boot the server via PXE (jira/request_PXEboot). Needed when reinstalling OS on servers without a remote management module. Creates a Remote Hands ticket for the datacenter on-call shift; status and correspondence are in the ticket (link will be emailed).

NameRequiredDescriptionDefault
idYesServer ID
confirmYesMust be true to run the operation.

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare non-read-only, non-destructive and open-world. The description goes further by disclosing the async ticketing workflow: a ticket is created for the datacenter on-call shift, status and correspondence live in the ticket, and the link is emailed. That is meaningfully beyond the annotation set, though it omits any expectation of latency or failure modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight clauses with the action stated first, followed by the trigger condition and the ticket mechanics. The parenthetical path is compact and the sentences all earn their place, though the last sentence is slightly dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 pre-answers 'what happens next' by explaining that results arrive via ticket and email. Combined with full parameter coverage, an agent has what it needs to call this correctly; only latency/error expectations are unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so 'id' (Server ID) and 'confirm' (must be true) are already fully documented. The description adds only an indirect hint that the target is a server; it contributes no format or constraint detail 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action ('boot the server via PXE') scoped as a Remote Hands ticket, and the internal marker (jira/request_PXEboot) pins the operation. An agent can distinguish this from request_rh_reboot, request_rh_power_on and request_rh_kvm 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.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit condition ('needed when reinstalling OS on servers without a remote management module'), which is real routing context. It does not, however, name the sibling alternatives an agent might weigh (e.g. set_boot_device, create_reinstall_task), 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.

request_rh_rebootA
Destructive
Inspect

Remote Hands request: reboot the server manually (jira/request_reboot). Creates a Remote Hands ticket for the datacenter on-call shift; status and correspondence are in the ticket (link will be emailed).

NameRequiredDescriptionDefault
idYesServer ID
confirmYesMust be true to run the operation.

TDQS

A3.7/5.0
Behavior4/5

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 covered. The description adds genuine context beyond that: a ticket is created for the datacenter on-call shift, status/correspondence live in the ticket, and a link is emailed. It does not, however, state that the action is irreversible or discuss timing/SLA.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and mechanism before the secondary detail about ticket correspondence. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 well-documented params, the description adequately explains what happens on invocation (ticket created, link emailed, correspondence in the ticket). Complete enough for an agent to call it correctly, though outcome/result details are thin.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 id and confirm. The description adds no additional meaning about parameter values, formats, or the confirmation gate, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (reboot the server) with a scope qualifier (Remote Hands, manually) and the underlying mechanism (jira/request_reboot ticket creation). The 'Remote Hands' framing implies physical/datacenter intervention, which helps distinguish it from reboot_server, but 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'manually' and 'datacenter on-call shift' — an agent can infer this is for cases requiring human intervention. However, there is no explicit when-to-use/when-not guidance and no named alternative (reboot_server, request_rh_power_on/off) to route the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_sales_assistanceBInspect

Ticket to the sales department (jira/request_assistance): cancellation or transfer of a service and similar requests. Describe details in message.

NameRequiredDescriptionDefault
idNoServer ID, if the request concerns a server
confirmYesMust be true to run the operation.
messageYesRequest details: what to cancel/transfer and why
subjectNoRequest subject

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare write (readOnlyHint=false), open-world, and non-destructive behavior. The description adds that details go into a message and frames the result as a 'ticket,' but says nothing about processing/turnaround, whether the ticket is asynchronous, or what confirmation yields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with no filler, and the tool's identity is front-loaded. It is efficient, though it wastes the opportunity to spend that brevity on disambiguation from overlapping siblings.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a write/ticket-creation tool with no output schema, the description is thin: it doesn't explain what comes back, expected latency, or how it differs from request_cancellation. Given full schema coverage the basics are covered, but decision-critical context is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (id, confirm, message, subject) are already documented in the schema. The description's only addition is 'Describe details in message,' which restates the schema and adds no new syntax or semantic guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action (create/open a ticket) and resource (sales department), plus the domain scope 'cancellation or transfer of a service.' However, it does not differentiate itself from sibling tools like request_cancellation or create_rhr_request, which overlap in intent, so an agent could still pick the wrong one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'cancellation or transfer of a service and similar requests' implies when to reach for this tool, but it names no alternatives and gives no explicit when-not guidance. With siblings like request_cancellation available, the boundary between them 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.

reset_billing_passwordAInspect

Reset the billing account password (whmcs/reset_password): a reset link is sent to the given email. Email must match the account email.

NameRequiredDescriptionDefault
emailYesAccount email
confirmYesMust be true to run the operation.

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the operation does not change the password directly but sends a reset link to the email, and the email must match the account. It stops short of covering auth requirements or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence pairing the action, the underlying endpoint, and the key constraint. No filler; the parenthetical endpoint reference is the only slightly extraneous element.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with full schema coverage and annotations covering the safety profile, the description supplies what's missing: the email-link mechanism and the email-match constraint. The undocumented confirm/required-flag detail is already carried by the schema, so completeness is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented. The description adds one constraint beyond the schema (email must match the account email), but never mentions the required 'confirm' flag, so it only marginally exceeds the schema baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Reset the billing account password') and even names the underlying call (whmcs/reset_password). There is no closely related sibling to distinguish from, so it does not need 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one precondition ('Email must match the account email'), which implies the correct invocation context, but it never states when to prefer this over alternatives or any other eligibility conditions. 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.

reset_ipmiAInspect

Reboot the server IPMI module (eq/unit_reset). Use when IPMI is unresponsive.

NameRequiredDescriptionDefault
idYesServer ID
confirmYesMust be true to run the operation.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the agent knows this is a mutating but non-destructive remote operation. The description adds useful scope context (the reset targets the IPMI submodule, not the server), but says nothing about side effects such as temporary IPMI unavailability, the required confirmation gate, or expected downtime, leaving behavioral gaps for a mutating tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler; the action is front-loaded and the usage condition follows immediately. Every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, no-output-schema mutation tool with annotations covering safety, the description tells the agent what the tool touches and when to reach for it. The main remaining gap is the absence of any note on downtime or the confirm requirement's purpose, but the schema covers the mechanics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with 'id' and 'confirm' fully documented in the schema, so the baseline is 3. The description adds no syntax, format, or value guidance beyond what the schema already provides for these two parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Reboot the server IPMI module') and even names the underlying operation (eq/unit_reset). This clearly distinguishes it from the many other reboot/power siblings such as reboot_server, power_off, and request_rh_reboot, which target the whole server rather than the IPMI module.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly gives the triggering condition: 'Use when IPMI is unresponsive.' That is a concrete when-to-use context, clearly implying this is a recovery action rather than routine power control. It does not name an alternative tool or state when NOT to use it, 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.

restore_snapshotA
Destructive
Inspect

Restore a VM from a snapshot (vm/restore_snapshot). DESTRUCTIVE: the current VM disk state will be overwritten with the snapshot state.

NameRequiredDescriptionDefault
idYesVirtual machine ID
nameYesSnapshot name
confirmYesMust be true to run the operation.

TDQS

A4/5.0
Behavior4/5

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 structured. The description adds real value beyond that by naming exactly what is destroyed ('current VM disk state will be overwritten'), which is the key operational consequence for the agent to reason about.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences: the action first, the destructive consequence immediately after. Nothing is wasted and the risk information is front-loaded rather than buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description needn't explain returns, and the annotations cover the safety flags. The destructive effect and confirmation requirement are made clear; only finer details like reversibility or post-restore VM state are omitted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so id, name, and confirm are already documented, including the requirement that confirm must be true. The description adds no formatting or semantic 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Restore a VM from a snapshot') plus the underlying API operation, so an agent can distinguish it from create_snapshot, remove_snapshot, and get_snapshots 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The destructive warning implies caution, but there is no explicit guidance on when to use this over alternatives or what prerequisites (beyond the confirm flag) must hold. 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.

run_post_install_taskBInspect

Run a Jenkins/Ansible task on a server (jenkins/call): task ID or name from list_post_install_tasks + extra params. E.g. installing GPU drivers after OS reinstall.

NameRequiredDescriptionDefault
idYesServer ID
taskYesTask ID or name from list_post_install_tasks
paramsNoAdditional task parameters
confirmYesMust be true to run the operation.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, openWorldHint=true and destructiveHint=false, so the agent knows this is a non-destructive but state-changing external call. The description adds that execution is a Jenkins/Ansible task run, but says nothing about whether it is asynchronous, how long it takes, how to poll status, or what permissions are required. With annotations carrying the safety profile, this is a limited but non-zero contribution.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence that front-loads the verb and resource, then appends the task-source pointer and an example. Every clause earns its place, though the parenthetical '(jenkins/call)' is backend detail an agent does not need for tool selection.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating, externally-executed task runner with no output schema, the description omits important context: whether the call returns immediately or produces a job to poll (check_task exists as a sibling), whether required confirm gating is enforced, and what the arbitrary params object should contain. Annotations cover the safety profile but not the execution lifecycle.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so id, task, params and confirm are all documented in the schema itself, including the constraint that confirm must be true. The description's statements about 'task ID or name from list_post_install_tasks' and 'extra params' merely restate schema content, adding no format, default, or constraint detail beyond it. 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Run a Jenkins/Ansible task on a server') and even names the backing endpoint (jenkins/call), so the action is unambiguous. It points to list_post_install_tasks as the source of task identifiers and gives a concrete scenario (GPU drivers after OS reinstall). It stops short of contrasting itself against the closest siblings such as create_reinstall_task or check_task, which would earn a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The example ('installing GPU drivers after OS reinstall') implies the post-install context, and the pointer to list_post_install_tasks tells the agent where to obtain the task argument. However, there is no explicit when-not-to-use guidance, no mention of alternative task tools (create_reinstall_task, check_task), and no note on prerequisites such as the server being in a post-reinstall state.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s3_cancel_account_deletionAInspect

Cancel S3 service deletion initiated via billing and restore the account to active status (s3/cancel_payment_account_deletion).

NameRequiredDescriptionDefault
s3uidNoS3 account UID; omit only if the token is bound to a single S3 account
confirmYesMust be true to run the operation.
account_idNoDeprecated alias for s3uid / get_users.id

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is carried by structured data; the description consistently adds that the outcome is account restoration to active status. It does not mention the mandatory 'confirm' gate, authorization requirements, or whether an already-active account errors out.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the operation first and the effect second; no filler. The trailing API route in parentheses is traceability rather than agent-usable information, a minor non-value-adding element.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter, non-destructive mutation with full schema documentation and no output schema, the description covers what it does and the resulting state change, which is what an agent needs to select it. Only the confirm-required behavior and error conditions are left to the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all three parameters (s3uid, confirm, account_id) documented in-schema including the deprecated alias and the omit-if-token-bound case. The description adds no parameter-level 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Cancel S3 service deletion') plus the resulting effect ('restore the account to active status'), which is more than the name alone conveys. It does not name the counterpart operations (s3_delete_account / s3_delete_payment_account), but the purpose is unambiguous against them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause 'initiated via billing' implicitly scopes when this tool applies (an S3 deletion that came through the billing path), which helps select it over other S3 teardown tools. However, there is no explicit when-to-use/when-not guidance or named alternative for deleting an account outright.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s3_create_accountBInspect

Create an S3 account: bind a plan and initial bucket (s3/create_account). Requires authentication.

NameRequiredDescriptionDefault
bucketNoInitial bucket name
confirmYesMust be true to run the operation.
plan_idNoPlan ID from s3_list_plans
locationNoLocation from s3_get_locations

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds a useful authentication requirement and names the underlying endpoint (s3/create_account), but says nothing about what binding a plan actually changes or whether the operation is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short clauses, with the core purpose front-loaded before the endpoint and auth note. No wasted sentences, though the parenthetical endpoint reference is low-value for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 does not indicate what a successful account creation returns (credentials, IDs, status) or how to verify completion. It is adequate given the strong annotation and schema coverage, but leaves a gap around outcome handling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so plan_id, location, bucket, and confirm are all documented in the schema. The description merely echoes the plan/bucket concepts and adds no format or constraint detail 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Create an S3 account") and clarifies the effect (binding a plan and initial bucket), which cleanly distinguishes it from s3_create_bucket and s3_create_order. However it never names those siblings explicitly, so the differentiation relies on the agent's inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description supplies a prerequisite ("Requires authentication") and contextualizes the operation as an account-provisioning step, which implies when it applies. It gives no when-not guidance and does not point to alternatives such as s3_create_bucket for subsequent buckets.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s3_create_bucketBInspect

Create a new bucket in an existing S3 account (s3/create_bucket).

NameRequiredDescriptionDefault
s3uidNoS3 account UID; omit only if the token is bound to a single S3 account
bucketYesBucket name
confirmYesMust be true to run the operation.
account_idNoDeprecated alias for s3uid / get_users.id

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnly=false, destructive=false, openWorld=true), and the description adds essentially nothing beyond them — no note on name uniqueness/global namespace, idempotency on retry, permission requirements, or what is returned. The only extra is the API route, which is marginal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence with no filler; the verb and resource come first and the API path is a compact parenthetical. Nothing wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple create operation with full schema coverage and annotations, the essentials are present, but the description omits the required confirm gate, whether creation is chargeable, and what success yields. Adequate but with clear gaps for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (including the deprecated account_id alias and the required confirm flag) are documented in the schema. The description adds no parameter meaning beyond that, which is the expected baseline when the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Create a new bucket') and scopes it ('in an existing S3 account'), plus the underlying API route. It is clearly distinguishable from siblings like s3_delete_bucket and s3_get_buckets, though it never names or contrasts those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance, no mention that an account must already exist (s3_create_account vs this tool), and no note that 'confirm' must be set true. The phrase 'existing S3 account' only hints at a prerequisite, leaving selection and usage to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s3_create_orderAInspect

Create a paid S3 storage order linked to billing (s3/create_order). MONEY: creates a real order/invoice.

NameRequiredDescriptionDefault
confirmYesMust be true to run the operation.
plan_idNoPlan ID
locationNoLocation

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag this as a non-read-only, open-world mutation. The description adds real context beyond them: this creates a genuine paid order/invoice with monetary consequences, which is the key behavioural fact an agent needs before calling it. It still omits irreversibility, idempotency, and duplicate-order behaviour.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short front-loaded sentences with zero filler: the action, its billing linkage, and the money warning. The API path is the only marginally redundant element and it is tucked at the end.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter, fully-documented mutation with no output schema, the description covers the critical risk (real invoice) but is silent on what a successful call produces, whether duplicate orders can be created, and what payment prerequisites apply. Adequate, but with clear gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so plan_id, location, and the required confirm flag are documented in the schema itself. The description adds only the qualifier 'paid' and no per-parameter 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource ('Create a paid S3 storage order') scoped to billing, and the API path (s3/create_order) removes ambiguity about which endpoint runs. It does not explicitly differentiate from near-neighbours such as order_server or s3_create_account, so the agent still has to infer that this is the S3-storage variant.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to choose this tool over siblings like order_server, s3_list_plans, or s3_create_account, and no preconditions beyond what the schema already enforces. The 'MONEY' note is a risk warning rather than usage guidance, 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.

s3_delete_accountA
Destructive
Inspect

Fully delete a user's S3 account (s3/delete_account). DESTRUCTIVE: all buckets and data will be deleted. Requires HOSTKEY_ALLOW_DESTRUCTIVE=1.

NameRequiredDescriptionDefault
s3uidNoS3 account UID; omit only if the token is bound to a single S3 account
confirmYesMust be true to run the operation.
account_idNoDeprecated alias for s3uid / get_users.id

TDQS

A4/5.0
Behavior4/5

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; the description then adds substantive context: the blast radius ('all buckets and data will be deleted') and an environment-level authorization gate. It stops short of saying whether deletion is immediate vs scheduled or reversible, which matters given a cancel-deletion sibling exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the operation and API path, then the destructive warning, then the prerequisite. Every sentence carries distinct, actionable information with zero filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a three-parameter destructive mutation with no output schema and full annotation coverage, the description supplies what the structured fields do not: blast radius and the destructive-gate requirement. The remaining gap is recoverability — nothing says whether the account can be restored or whether this blocks other operations while pending.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, including the s3uid omission rule, the confirm must-be-true rule, and the deprecated account_id alias, so the schema carries all parameter meaning. The description adds nothing parameter-specific, which is acceptable at full coverage but earns only the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('fully delete') and resource ('a user's S3 account') and even cites the underlying API path (s3/delete_account). The word 'fully' plus 'all buckets and data will be deleted' cleanly separates it from narrower siblings like s3_delete_bucket, s3_delete_payment_account, and s3_cancel_account_deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a genuine precondition (HOSTKEY_ALLOW_DESTRUCTIVE=1 must be set), which is real usage guidance an agent needs before attempting the call. However, it never says when to prefer this over siblings such as s3_cancel_account_deletion or s3_delete_payment_account, so the routing decision 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.

s3_delete_bucketA
Destructive
Inspect

Delete a bucket from an S3 account (s3/delete_bucket). DESTRUCTIVE: all files in the bucket will be deleted.

NameRequiredDescriptionDefault
s3uidNoS3 account UID; omit only if the token is bound to a single S3 account
bucketYesBucket name
confirmYesMust be true to run the operation.
account_idNoDeprecated alias for s3uid / get_users.id

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=false, openWorldHint=true, and destructiveHint=true, so the safety profile is covered. The description adds valuable context by stating the concrete consequence: 'all files in the bucket will be deleted'. However, it does not mention the required confirmation flag or irreversibility beyond that consequence.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences and is front-loaded with the core action. Every sentence adds useful information: the first states purpose and API path, the second states the destructive consequence. There is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with full annotation coverage (destructiveHint=true), a fully documented schema, and no output schema, the description provides the essential warning that all files are deleted. It could be slightly more complete by mentioning the confirm=true requirement explicitly, but the schema already documents that parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 fully documented in the schema itself. The description adds no parameter-level meaning beyond what is already in the schema, which is acceptable given the high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Delete a bucket from an S3 account'. It also includes the underlying API operation path. Because it explicitly names the bucket as the target, it is inherently distinguishable from sibling operations like s3_delete_file and s3_delete_account.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not explain when to use this tool versus alternatives such as s3_delete_file, s3_delete_account, or s3_delete_bucket-like operations. It also does not mention prerequisites like the required confirm=true flag, though that is documented in the schema. It merely implies usage through the tool name and purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s3_delete_fileA
Destructive
Inspect

Delete a file from a bucket (s3/delete_file). DESTRUCTIVE: the file is permanently deleted.

NameRequiredDescriptionDefault
fileYesFile key (name)
s3uidNoS3 account UID; omit only if the token is bound to a single S3 account
bucketYesBucket name
confirmYesMust be true to run the operation.
account_idNoDeprecated alias for s3uid / get_users.id

TDQS

A3.5/5.0
Behavior3/5

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 known; the description adds only the word 'permanently', which sharpens the consequence but largely restates the annotation. It does not mention the required confirm flag, error behavior for missing files, or idempotency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the effect front-loaded and the destructive warning immediately after. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, and annotations plus schema already cover safety and inputs, so the description is nearly sufficient. However, for an irreversible delete it could state the confirm requirement and what happens on a missing key, which are gaps an agent would want covered.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all five parameters (bucket, file, s3uid, confirm, account_id) are documented in the schema, so baseline 3 applies. The description adds no parameter-level meaning such as file-key format or the precedent order between s3uid and the deprecated account_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Delete a file from a bucket') plus the underlying API path, which is clearly distinct from siblings like s3_delete_bucket or s3_get_files. It stops short of naming an alternative tool, 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives a strong implicit signal ('DESTRUCTIVE: permanently deleted') that tells the agent this is an irreversible action, but it offers no explicit when-to-use/when-not guidance or routing to sibling tools such as s3_delete_bucket for bucket-level removal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s3_delete_payment_accountA
Destructive
Inspect

Initiate S3 account deletion via service cancellation in billing (s3/delete_payment_account). DESTRUCTIVE: an end date will be set on the active service. Requires HOSTKEY_ALLOW_DESTRUCTIVE=1.

NameRequiredDescriptionDefault
s3uidNoS3 account UID; omit only if the token is bound to a single S3 account
confirmYesMust be true to run the operation.
account_idNoDeprecated alias for s3uid / get_users.id

TDQS

A3.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare destructiveHint=true, so marking it DESTRUCTIVE repeats structured data. What earns credit is the added semantics: deletion is implemented as a scheduled service end date rather than an immediate purge, plus the required environment flag — neither of which is visible in 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the destructive warning front-loaded immediately after the purpose. The parenthetical API path is slightly redundant but minimal overhead; nothing is padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers the destructive nature, the mechanism (end date on the service), and the env-var gate, which is solid for a no-output-schema mutation tool. It omits two things an agent needs: how this differs from s3_delete_account, and that the action appears reversible via the s3_cancel_account_deletion sibling.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so s3uid optionality, the confirm requirement, and the deprecated account_id alias are already fully documented in the schema. The description adds no parameter-level information beyond the schema, which meets the baseline but no more.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Initiate S3 account deletion via service cancellation in billing') and names the underlying API path. However, it does not differentiate itself from the closely-named sibling s3_delete_account, which is the single most important distinction an agent must make here.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a real precondition ('Requires HOSTKEY_ALLOW_DESTRUCTIVE=1'), which is actionable usage guidance. But it never says when to prefer this tool over s3_delete_account or s3_cancel_account_deletion, so the agent is left to guess between near-identical siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s3_get_bucketsA
Read-only
Inspect

List S3 account buckets and usage (s3/get_buckets_rmq). Pass s3uid or account_id from s3_get_users. May return a task key — then track with check_task.

NameRequiredDescriptionDefault
s3uidNoS3 account UID from s3_get_users.s3uid
account_idNoNumeric id from s3_get_users.id (alias; resolved to s3uid)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only and open-world. The description adds useful behavioral context beyond annotations: it may return a task key and that task should be tracked with check_task, revealing an async workflow. It does not discuss permissions or return shape, but that is less critical for a read-only list tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two compact clauses, front-loads the core action, and every sentence provides actionable information: the resource, the ID source, and the task-tracking follow-up.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 complete schema coverage and annotations, the description covers the key prerequisites and the async-task follow-up. It does not explain what 'usage' contains or whether calling with no ID lists everything, but those gaps are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented, including their provenance and the account_id alias behavior. The description repeats the provenance from s3_get_users but adds no syntax or constraint details beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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 S3 account buckets and usage.' The endpoint hint '(s3/get_buckets_rmq)' implicitly distinguishes it from the queue-based sibling, but no explicit sibling differentiation is given.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It tells the agent where to get the required identifiers ('Pass s3uid or account_id from s3_get_users') and what to do if a task key is returned ('track with check_task'). It does not explicitly compare with the sibling s3_get_buckets_via_queue.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s3_get_buckets_via_queueA
Read-only
Inspect

Same as s3_get_buckets: list buckets via s3/get_buckets_rmq. Prefer s3_get_buckets.

NameRequiredDescriptionDefault
s3uidNoS3 account UID from s3_get_users.s3uid
account_idNoNumeric id from s3_get_users.id (alias; resolved to s3uid)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so safety is covered. The description adds the fact that the call is routed through s3/get_buckets_rmq, but does not say whether that makes the operation asynchronous, slower, or a fallback path — the main behavioral question an agent would have about a "via queue" variant.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short clauses: the equivalence statement first, then the routing preference. No filler, and the most decision-relevant information (prefer the other tool) is present and easy to extract.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-required-parameter read tool with full schema coverage and an output-free contract, the definition covers equivalence and routing adequately. The remaining gap is behavioral: nothing tells the agent when the queued path is expected to be used or how it differs in outcome from s3_get_buckets.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: s3uid and account_id are both documented, including that account_id is an alias resolved to s3uid. The description adds nothing about parameters, which is acceptable given the schema does the work, but it earns no extra credit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

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 buckets") and explicitly frames itself as an equivalent variant of the sibling s3_get_buckets, so an agent can tell the two apart. It does not explain what "via_queue" / s3/get_buckets_rmq actually means, so the underlying mechanism stays opaque.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Prefer s3_get_buckets" is an explicit routing instruction to the alternate sibling, which is the key selection signal here. It stops short of saying when this queued variant is the right choice (e.g., fallback when the direct call fails), so the condition for using it is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s3_get_filesA
Read-only
Inspect

List files in a bucket with pagination and search (s3/get_files).

NameRequiredDescriptionDefault
pageNoIgnored; use search / limit. InvAPI paginates with continuation_token.
limitNoPage size (mapped to InvAPI max_keys, max 100)
s3uidNoS3 account UID; omit only if the token is bound to a single S3 account
bucketYesBucket name
searchNoSearch string by file name
account_idNoDeprecated alias for s3uid / get_users.id

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds that pagination and search are supported, which is useful behavioral context, but it does not describe return format, pagination mechanics, or operational constraints 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single well-formed sentence with the core operation front-loaded and no wasted text. The endpoint reference in parentheses is compact and useful for disambiguation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the fully described schema, read-only and open-world annotations, and no output schema, the description is mostly sufficient for calling the tool. It does not explain pagination mechanics such as continuation_token, but the schema covers the parameter-level details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all six parameters, including bucket, search, limit, and the deprecated/ignored page field, are documented in the schema. The description mentions pagination and search at a high level but adds no parameter-level meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it lists files in a bucket, with pagination and search, and includes the underlying endpoint s3/get_files. This distinguishes it from nearby S3 tools such as s3_get_buckets, which lists buckets rather than files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied by 'List files in a bucket with pagination and search', but there is no explicit when-to-use or when-not-to-use guidance and no named alternative. The agent can infer this is for file listing within a bucket, but the description does not route it among alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s3_get_locationsB
Read-only
Inspect

List available locations for S3 (s3/get_available_locations).

NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered externally. The description adds only the underlying endpoint string, with no information about auth requirements, pagination, or how locations relate to 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence that leads with the verb and resource, with the endpoint parenthetical as a minor but harmless addition. Nothing wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter, read-only list call with annotations covering the safety profile and no output schema, the description is sufficient to call it correctly. Only minor context, such as what a location represents or the return shape, is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters and schema coverage is 100%, so there is nothing to disambiguate. Baseline of 4 is appropriate for a zero-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (available locations for S3), so an agent immediately knows what it returns. There is no close sibling it needs to be distinguished from among the s3_* family, so no differentiation is required.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

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 a discovery/enumeration call for S3 locations. No explicit when-to-use, prerequisites, or alternatives are provided, and none of the sibling tools are named as related choices.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s3_get_usersA
Read-only
Inspect

List S3 users with service, traffic, and storage usage info (s3/get_users). Full filtering is available to administrators. Use returned s3uid/id with s3_get_buckets.

NameRequiredDescriptionDefault
locationNoFilter by location (for administrators)

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With readOnlyHint and openWorldHint already declared, this is a safe read the annotations already cover. The description adds behavior beyond that: filtering scope depends on administrator privileges. It does not disclose pagination or result-size behavior, keeping it out of the top band.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the resource and its payload, then the access constraint and the follow-up call. The parenthetical API path is minor noise but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

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 names the returned identifiers (s3uid/id) and the usage data fields, and it covers the admin-filtering constraint. Return shape detail and pagination remain unstated, which is the only real gap for a single-parameter read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single 'location' parameter that the schema already documents as admin-only. The description's 'full filtering is available to administrators' restates that constraint rather than adding format, matching, or syntax 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List S3 users') plus the payload the tool returns (service, traffic, storage usage). It differentiates from most siblings by identifying s3_get_buckets as the follow-on, though it does not distinguish itself from other s3_* list tools such as s3_get_locations or s3_get_buckets_via_queue.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real usage context: filtering is admin-gated and the returned s3uid/id feeds s3_get_buckets. It never states when this tool is the wrong choice versus neighboring s3 list tools, 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.

s3_list_plansB
Read-only
Inspect

List available S3 storage plans (s3/list_plans).

NameRequiredDescriptionDefault
locationNoLocation (filter), if supported

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds essentially nothing beyond that — no note on whether the list is location-scoped, whether it can be empty, or that it is a read-only catalog lookup.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence, front-loaded with the verb and resource, with zero filler. Nothing redundant or misplaced.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, annotation-covered read-only list tool with a fully documented single parameter and no output schema, the description is minimally sufficient. It still omits what a 'plan' represents and how the result relates to ordering (s3_create_order), leaving an agent to infer the tool's role.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single location parameter is documented in the schema itself ('Location (filter), if supported'). The description adds no meaning 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: list available S3 storage plans, with the underlying API path 's3/list_plans' as corroboration. The resource is distinct from siblings like list_traffic_plans and s3_get_locations, but the description never explicitly differentiates itself from them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 s3_get_locations or list_traffic_plans, and no stated prerequisites or follow-up actions (e.g., feeding a plan into s3_create_order). Usage must be inferred entirely from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s3_show_keyA
Read-only
Inspect

Get a decrypted S3 access key (s3/show_key). SECRET: do not log or share with third parties.

NameRequiredDescriptionDefault
s3uidNoS3 account UID; omit only if the token is bound to a single S3 account
key_typeYesKey type
account_idNoDeprecated alias for s3uid / get_users.id

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safe-read profile (readOnlyHint, openWorldHint), but the description adds genuinely useful context beyond them: the value is decrypted and secret, with an explicit handling warning not to log or share. It stops short of noting audit logging or who is permitted to retrieve keys.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, with the core action front-loaded and the security warning immediately following. Nothing is wasted and nothing important is buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 burden of explaining the return value, and it only says 'decrypted S3 access key' without specifying the response fields or how access_key versus secret_key selection affects output. Adequate for a three-parameter read, but the missing return shape is a real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all three parameters, including the key_type enum and the conditional s3uid note, are already documented in the schema. The description adds no parameter semantics of its own, making baseline 3 correct.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: retrieves a decrypted S3 access key. The name and parenthetical endpoint mapping make it distinguishable from key-listing siblings like list_api_keys or get_api_key, though it never explicitly contrasts with them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 s3_get_users or get_api_key, and no prerequisites stated (e.g., whether s3uid must be known first). Usage is only implied by the description and the schema's conditional field note.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

s3_update_traffic_infoBInspect

Update S3 account traffic information (s3/update_traffic_info). Available to administrators only.

NameRequiredDescriptionDefault
s3uidNoS3 account UID; omit only if the token is bound to a single S3 account
confirmYesMust be true to run the operation.
account_idNoDeprecated alias for s3uid / get_users.id

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds genuinely new context — the admin-only auth requirement — but says nothing about immediacy of effect, what happens to unmentioned traffic settings, or how the required confirm flag gates execution.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the action front-loaded and the endpoint slug parenthesized for traceability. Efficient, though the parenthetical restates the tool name and consumes space that could carry actual behavioral detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating, admin-gated tool with a mandatory confirm parameter and no output schema, the description should explain what the update accomplishes and what to expect afterwards. The safety profile and parameter semantics are covered by structured fields, but the description leaves a real gap around what 'traffic information' means.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 s3uid, confirm and the deprecated account_id alias. The description adds no parameter meaning of its own, and notably does not clarify that no parameter actually specifies the new traffic values, which is the most confusing thing about the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Update') and resource ('S3 account traffic information'), which distinguishes it from read-only siblings like s3_get_users and s3_list_plans. It stops short of saying what aspect of traffic is updated (quota, plan, overage), so an agent still cannot tell exactly what the mutation changes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The only guidance is 'Available to administrators only', which is an authorization prerequisite rather than a when/when-not rule. No alternative sibling is named and no condition for preferring this tool over s3_list_plans or s3_create_order is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_presetsB
Read-only
Inspect

Search free servers matching a preset name (e.g. vm.pico). Requires auth.

NameRequiredDescriptionDefault
nameYesPreset name, e.g. vm.pico
scopeNofree (default) — available only
locationYesLocation: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered; the description adds the auth requirement, which is useful. However, it says 'free servers' while the scope parameter permits 'all', an unresolved inconsistency, and it says nothing about result volume or pagination for an open-world search.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action and ending with the prerequisite. No filler, though the phrasing is terse enough to leave the free/all scope question unaddressed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only search with a fully documented schema and no output schema, the description covers the essentials plus the auth requirement. It falls short on clarifying the free-vs-all scope distinction and how the results relate to the preset listing tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so name, scope, and location are all documented in the schema, including the enum and the free/all distinction. The description only repeats the vm.pico example already present in the schema and adds no new syntax or format meaning. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Search) and resource (free servers matched by preset name) with a concrete example (vm.pico). It is distinguishable from list_presets/get_preset in spirit, but it never names those siblings, so the differentiation must be inferred.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Only prerequisite given is 'Requires auth.' There is no statement of when to use this over list_presets, get_preset, or list_stock_servers, nor any exclusion guidance. Usage is implied by the phrase 'matching a preset name' but not articulated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_servers_by_tagA
Read-only
Inspect

Search servers by tag name or value (tags/search_user). Returns server IDs.

NameRequiredDescriptionDefault
valueYesTag search pattern

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered structurally. The description adds useful return context ('Returns server IDs') and even names the backing endpoint (tags/search_user), but gives no detail on pagination, match semantics, or empty-result behavior. Adequate, not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero filler; the purpose is front-loaded and the return-value note follows immediately. Nothing could be trimmed without losing information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, read-only search with fully described schema and annotations covering safety, the definition is essentially complete, and it even discloses the return type (server IDs) despite having no output schema. It stops short of 5 only because matching semantics and result limits are unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter ('value' – 'Tag search pattern') is already documented in the schema, so the baseline is 3. The description's 'tag name or value' hints that the pattern can match either facet of a tag, adding slight nuance, but no syntax, format, or matching-rule detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('search') plus resource ('servers') and the discriminator ('by tag name or value'), which separates it from sibling get_server_tags (which lists a server's tags) and get_servers (which lists servers unfiltered). It does not name those siblings explicitly, so it lands 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.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'search servers by tag' implies the use case (you have a tag and want matching servers), but there is no explicit when-to-use, when-not-to-use, or named alternative (e.g., use get_servers instead). Usage is inferable but not guided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_boot_deviceA
Destructive
Inspect

Set server boot order (eq/boot_dev): pxe — network boot (reinstall step 3), disk — boot from disk (step 6), cd — mounted ISO.

NameRequiredDescriptionDefault
idYesServer ID
mediaYesBoot device
confirmYesMust be true to run the operation.

TDQS

A3.7/5.0
Behavior3/5

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 mutation/safety profile is covered. The description adds useful behavioral context by explaining what each boot mode actually does (network vs disk vs mounted ISO), but says nothing about confirmation requirements, side effects, or reversibility beyond what annotations supply.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the core action front-loaded and the enum semantics bundled inline; no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter tool with full schema coverage, no output schema, and annotations carrying the safety profile, the description supplies enough to act correctly, including workflow placement. It is only marginally short on explicit when-to-use-vs-sibling guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be 3, but the description genuinely enriches the 'media' enum by defining each value's meaning (pxe = network boot, disk = boot from disk, cd = mounted ISO) beyond the schema's bare 'Boot device' label. It adds little for 'id' or 'confirm', which the schema already documents.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb+resource ('Set server boot order') and even names the underlying API field (eq/boot_dev), so an agent immediately knows it changes a server's boot device. It does not, however, explicitly distinguish itself from related siblings like request_rh_pxe_boot or reinstall_server, which also touch boot/PXE behavior.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Workflow placement is hinted at via '(reinstall step 3)' and '(step 6)' and the prerequisite 'cd — mounted ISO', giving implicit context for when each mode applies. But there is no explicit statement of when to use this tool versus alternatives (e.g., request_rh_pxe_boot), 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.

set_main_ipBInspect

Set the primary IP address of the server (ip/set_main) when there are multiple addresses.

NameRequiredDescriptionDefault
idYesServer ID
ipYesIP address
mainYesIP address that will become primary
confirmYesMust be true to run the operation.

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the agent knows this is a non-destructive write. The description adds the multiple-address precondition, but does not say what side effects a primary-IP change has (service interruption, reverse DNS implications) or that confirm must be true — that requirement lives only in 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the effect stated first and the precondition second. The parenthetical API identifier is mildly redundant but useful for traceability, and there is no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Annotations carry the safety profile and the schema fully documents all four required parameters, so the description only needs to add situational context. It covers the precondition but omits any note on the impact of changing the primary address or the confirm-required behavior, leaving a modest gap for a mutation tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so id, ip, main and confirm are all documented in the schema and the baseline is 3. The description adds no disambiguation between the two similar parameters (ip vs main), which is the one place extra prose would have helped.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Set the primary IP address of the server") and even maps it to the underlying API call (ip/set_main). An agent can tell this apart from other IP-related siblings like get_ip_info or update_ptr_record, though the description never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause "when there are multiple addresses" gives an implicit precondition for use, which is more than nothing. However, it names no alternatives (e.g., how to first inspect addresses via get_ip_info) and states no exclusions or prerequisites such as needing the server in a known state.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_novncB
Read-only
Inspect

Start a NoVNC (HTML5) server console session (eq/novnc): returns a link to open in the browser.

NameRequiredDescriptionDefault
idYesServer ID
white_ipNoIP allowed to connect from

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description usefully adds that a session is created and that the return is a browser link (important since there is no output schema), but omits any auth/permission or session-lifetime context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the verb and resource first, and no wasted wording. The unexplained "(eq/novnc)" parenthetical is a minor blemish.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 discloses the return value (a browser link), and annotations carry the safety profile. It remains incomplete on how this differs from get_vnc_console and on session behavior, leaving a real ambiguity for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters (id, white_ip) are documented in the schema. 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Start") and resource ("NoVNC (HTML5) server console session"), and even clarifies the return ("a link to open in the browser"). However, it does not distinguish itself from the sibling get_vnc_console, which appears to overlap in purpose, and the "(eq/novnc)" tag is unexplained jargon.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use or when-not-to-use guidance, and no mention of alternatives such as get_vnc_console or request_rh_kvm. The agent is left to infer the scenario (interactive browser console) 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.

unblock_ipCInspect

Unblock an IP address on the server (net/unblock_ip).

NameRequiredDescriptionDefault
idYesServer ID
ipYesIP address
confirmYesMust be true to run the operation.

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the mutation/safety profile is covered. The description adds nothing beyond the raw endpoint name — it does not say what state change occurs, whether the IP must currently be blocked, or what happens to existing block rules.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the operation front-loaded and no filler. It is efficient, though the parenthetical endpoint reference is minor overhead.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and full annotation coverage, the core need is met, but for a mutation tool the description could say more about effect and prerequisites. It is minimally adequate rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and all three parameters (id, ip, confirm) are documented in the schema, so the description neither needs nor provides parameter detail. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (unblock) and resource (IP address) with the scope (on the server), which is clear enough to act on. It does not, however, distinguish itself from the sibling block_ip or explain the relationship between them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 the sibling block_ip that performs the inverse operation. The agent must infer that this reverses a prior block.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unmount_isoAInspect

Unmount an ISO image from a server (iso/unmount_iso). Async operation. Callback key returned — track with check_task.

NameRequiredDescriptionDefault
idYesServer ID
confirmYesMust be true to run the operation.

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the operation is async and returns a callback key that must be polled via check_task. It does not describe side effects on the running server or whether the ISO remains uploaded.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short, front-loaded sentences with zero filler: the action first, then the async trait, then the tracking instruction. Every sentence carries actionable information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter, annotation-covered, no-output-schema tool, the description covers the action, the async nature, and the return-tracking mechanism. Nothing an agent needs in order to invoke and follow up on the call is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both 'id' and 'confirm' fully documented in the schema, so the baseline is 3. The description adds no extra meaning about either parameter (e.g., whether 'id' is a server or ISO identifier).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Unmount an ISO image from a server') and even names the underlying endpoint (iso/unmount_iso). An agent can immediately distinguish it from the sibling mount_iso and from delete_iso_image.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides operational context that the call is asynchronous and that the returned callback key should be tracked with check_task, which effectively tells the agent the follow-up flow. It does not, however, state when to unmount versus other ISO-management siblings such as mount_iso or delete_iso_image.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_api_keyBInspect

Update API key settings (api_keys/edit): name, IP allowlist, notifications, active flag.

NameRequiredDescriptionDefault
idYesKey ID
ipNoIP allowlist
nameYesKey name
activeYestrue — key is active
confirmYesMust be true to run the operation.
login_notify_methodYesLogin notification method
login_notify_addressNo

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=true, so the mutation/safety profile is covered. The description adds the editable field set but omits meaningful behavior such as the mandatory 'confirm' gate required by the schema, permission/auth requirements, or reversibility. With annotations carrying the safety burden, a 3 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the verb and endpoint first and no filler. It is appropriately sized for a straightforward update tool, though it is terse enough to omit useful context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter mutation with 5 required fields, the description is minimally viable: annotations cover safety and the schema covers params, but it never mentions the required 'confirm' flag or any return behavior. No output schema exists, so nothing external compensates for the missing operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 86%, so the schema already documents nearly every parameter. The description paraphrases some of them (name, IP allowlist, notifications, active flag) but adds no format, constraint, or enum detail beyond what the schema provides. 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.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update API key settings') and enumerates the editable fields (name, IP allowlist, notifications, active flag). The verb 'update' cleanly distinguishes it from the sibling create_api_key, delete_api_key, get_api_key and list_api_keys. It lacks an explicit sibling callout, so it lands at 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus the other api_key siblings, nor any prerequisite or precondition stated. The endpoint reference (api_keys/edit) hints at context but does not tell the agent when this is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_billing_clientBInspect

Update client data in billing (whmcs/update_client): name, company, address, email, phone, etc.

NameRequiredDescriptionDefault
confirmYesMust be true to run the operation.
billing_cityNo
billing_emailNo
billing_stateNo
billing_countryNo
billing_address1No
billing_address2No
billing_lastnameNo
billing_postcodeNo
billing_firstnameNo
billing_companynameNo
billing_phonenumberNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the safety profile (readOnlyHint=false, openWorldHint=true, destructiveHint=false), so the description's main added value is confirming the mutation targets an external billing module (whmcs/update_client). It says nothing about partial-update semantics, reversibility, or auth needs, so it adds only modest 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the verb, resource and backend path leading. No filler, though the trailing 'etc.' is slightly sloppy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 12-parameter mutation with no output schema and near-zero schema coverage, the definition omits critical behavior: whether omitted fields are left unchanged, whether the whole record is overwritten, and how errors surface. This is a significant gap for an update operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is only 8% (only 'confirm' is documented), so the description must compensate. The field list (name, company, address, email, phone) maps loosely onto the billing_* parameters but uses generic terms and 'etc.' rather than matching parameter names, leaving the correspondence inferential.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update client data in billing') plus the backend module (whmcs/update_client), and enumerates the main fields touched. It implicitly distinguishes itself from the sibling get_billing_client, though it never names it explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Only implies usage through its verb. There is no statement of when to use this versus get_billing_client, whether the client must already exist, or any prerequisite/authorization context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_contactBInspect

Update an additional contact (whmcs/update_contact): email, password, phone. Providing a phone enables SMS 2FA.

NameRequiredDescriptionDefault
emailYesContact email
confirmYesMust be true to run the operation.
password2NoNew contact password
contact_idYesContact ID
phonenumberNoPhone (enables SMS 2FA)

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly=false, destructive=false, openWorld=true). The description adds one genuinely useful behavioral fact: supplying a phone number enables SMS 2FA, a side effect not visible elsewhere. It omits the required `confirm=true` gate and any sense of reversibility, so it is helpful but incomplete.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences with the mutating fields front-loaded and the notable side effect last. The internal '(whmcs/update_contact)' breadcrumb is slightly noisy but costs little.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

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 and no annotation coverage of prerequisites, the description should at minimum mention that `confirm` must be true to run. It covers the field list but leaves the agent to discover the required confirmation flag from the schema alone.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already names every parameter. The description adds meaning only for `phonenumber` (enables SMS 2FA); it says nothing about the required `confirm` flag or that `password2` is a password change. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update an additional contact') and enumerates the mutable fields (email, password, phone). It is clearly distinct from add_contact and delete_contact by the verb, though it never contrasts itself with update_billing_client, the nearest sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

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 the alternatives (update_billing_client, add_contact, delete_contact) in a sibling list full of near-identical contact/account mutations. The word 'additional' hints at scope but the agent must infer everything else.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_ptr_recordBInspect

Update the PTR record for an IP address (ip/update_ptr). Multiple records are passed separated by %0A.

NameRequiredDescriptionDefault
idYesServer ID
ipYesIP address
ptrYesNew PTR value
confirmYesMust be true to run the operation.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and openWorldHint=true, so the agent knows this mutates external state. The description adds the batch-input format ('Multiple records passed separated by %0A'), which is genuinely useful behavioral context, but omits whether existing PTR values are overwritten and whether the operation is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences with the core purpose front-loaded and the separator note following. No padding or redundancy, though the parenthetical API path is of marginal value to an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-param mutation tool with full schema coverage and annotations covering safety, the essentials are present. However, it lacks return-value expectations (no output schema), overwrite semantics, and any guidance on partial failure when multiple records are submitted.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so all four parameters (id, ip, ptr, confirm) are already documented in the schema. The description adds only the multi-record separator convention, which isn't captured in the schema's 'New PTR value' field description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Update the PTR record for an IP address') with a parenthetical API path mapping, clearly distinguishing it from sibling get_ptr_record. It doesn't name siblings explicitly but the read/write distinction is implied.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus get_ptr_record or other DNS tools, no prerequisites stated (such as requiring the IP to already exist or belong to the server), and no mention of the mandatory confirm flag's role as a safety gate beyond schema description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_isoBInspect

Upload a new ISO image by URL (iso/upload). Available to clients.

NameRequiredDescriptionDefault
urlYesDirect URL of the ISO image
nameNoImage name in the library
confirmYesMust be true to run the operation.

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only, non-destructive, open-world operation, so the safety profile is covered. The description adds only the entitlement note ('Available to clients'); it says nothing about persistence of the download, size limits, or what happens if the URL is unreachable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, action front-loaded, with no padding. The '(iso/upload)' endpoint aside is arguably redundant, which 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.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter mutation with full schema coverage and a safety-carrying annotation set, the essentials are present. What is missing is sibling disambiguation versus 'add_iso_image' and any note about the asynchronous upload/download nature of a URL-based ingestion.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so 'url', 'name', and 'confirm' are already documented in the schema. The phrase 'by URL' lightly reinforces the url parameter but adds no format or syntax detail beyond it; baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Upload a new ISO image') and clarifies the mechanism ('by URL'), so the action is unambiguous. It does not, however, differentiate itself from the sibling 'add_iso_image', leaving the agent to guess which one adds an existing library image versus ingests a new one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Available to clients' is the only usage condition given, and it is an entitlement hint rather than a when-to-use rule. There is no guidance on when to prefer this over 'add_iso_image', nor any prerequisite about the URL being reachable.

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.

  1. 14 tool updatesv1.0.8
    • Changedadd_static_nat3 fields changed
      • addedInput schema / properties / ip_acl
        Added value: +{
        +  "description": "Client IP(s) allowed to reach IPMI via NAT (InvAPI ip_acl). Required by some accounts when panel Proxy ACL is not enough.",
        +  "type": "string"
        +}
      • addedInput schema / properties / secured
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "boolean"
        +    },
        +    {
        +      "type": "integer"
        +    }
        +  ],
        +  "description": "Secured NAT flag if supported by InvAPI"
        +}
      • addedInput schema / properties / ttl
        Added value: +{
        +  "description": "NAT lifetime in seconds, if supported",
        +  "type": "integer"
        +}
    • Changedget_network_status1 field changed
      • addedInput schema / properties / port
        Added value: +{
        +  "description": "Optional physical/logical interface or switch port (e.g. eth0). Omit to query all; if InvAPI fails on an unmapped NIC, retry with a mapped port from get_server.",
        +  "type": "string"
        +}
    • Changedmount_iso3 fields changed
      • addedInput schema / properties / iso
        Added value: +{
        +  "description": "ISO name or id (InvAPI field `iso`)",
        +  "type": [
        +    "string",
        +    "number"
        +  ]
        +}
      • changedInput schema / properties / iso_id / description
        Previous value: -"Image ID from list_iso_images"New value: +"Alias: image ID from list_iso_images → iso"
      • changedInput schema / properties / name / description
        Previous value: -"Image name (if identifying by name)"New value: +"Alias: image name / iso_name → iso"
    • Changeds3_cancel_account_deletion1 field changed
      • changedInput schema / properties / account_id / description
        Previous value: -"Deprecated alias for s3uid"New value: +"Deprecated alias for s3uid / get_users.id"
    • Changeds3_create_bucket1 field changed
      • changedInput schema / properties / account_id / description
        Previous value: -"Deprecated alias for s3uid"New value: +"Deprecated alias for s3uid / get_users.id"
    • Changeds3_delete_account1 field changed
      • changedInput schema / properties / account_id / description
        Previous value: -"Deprecated alias for s3uid"New value: +"Deprecated alias for s3uid / get_users.id"
    • Changeds3_delete_bucket1 field changed
      • changedInput schema / properties / account_id / description
        Previous value: -"Deprecated alias for s3uid"New value: +"Deprecated alias for s3uid / get_users.id"
    • Changeds3_delete_file1 field changed
      • changedInput schema / properties / account_id / description
        Previous value: -"Deprecated alias for s3uid"New value: +"Deprecated alias for s3uid / get_users.id"
    • Changeds3_delete_payment_account1 field changed
      • changedInput schema / properties / account_id / description
        Previous value: -"Deprecated alias for s3uid"New value: +"Deprecated alias for s3uid / get_users.id"
    • Changeds3_get_buckets3 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"Deprecated alias for s3uid; prefer s3uid"New value: +"Numeric id from s3_get_users.id (alias; resolved to s3uid)"
      • changedInput schema / properties / s3uid / description
        Previous value: -"S3 account UID (s3uid) from s3_get_users or create_account/order. Numeric id (e.g. 13457) or string uid."New value: +"S3 account UID from s3_get_users.s3uid"
      • removedInput schema / required
        Removed value: -[
        -  "s3uid"
        -]
    • Changeds3_get_buckets_via_queue3 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"Deprecated alias for s3uid; prefer s3uid"New value: +"Numeric id from s3_get_users.id (alias; resolved to s3uid)"
      • changedInput schema / properties / s3uid / description
        Previous value: -"S3 account UID (s3uid) from s3_get_users or create_account/order. Numeric id (e.g. 13457) or string uid."New value: +"S3 account UID from s3_get_users.s3uid"
      • removedInput schema / required
        Removed value: -[
        -  "s3uid"
        -]
    • Changeds3_get_files3 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"Deprecated alias for s3uid"New value: +"Deprecated alias for s3uid / get_users.id"
      • changedInput schema / properties / limit / description
        Previous value: -"Page size"New value: +"Page size (mapped to InvAPI max_keys, max 100)"
      • changedInput schema / properties / page / description
        Previous value: -"Page number"New value: +"Ignored; use search / limit. InvAPI paginates with continuation_token."
    • Changeds3_show_key1 field changed
      • changedInput schema / properties / account_id / description
        Previous value: -"Deprecated alias for s3uid"New value: +"Deprecated alias for s3uid / get_users.id"
    • Changeds3_update_traffic_info1 field changed
      • changedInput schema / properties / account_id / description
        Previous value: -"Deprecated alias for s3uid"New value: +"Deprecated alias for s3uid / get_users.id"
  2. 11 tool updatesv1.0.4
    • Changeds3_cancel_account_deletion2 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"S3 account ID (if required; check via s3_get_users)"New value: +"Deprecated alias for s3uid"
      • addedInput schema / properties / s3uid
        Added value: +{
        +  "description": "S3 account UID; omit only if the token is bound to a single S3 account",
        +  "type": [
        +    "string",
        +    "number"
        +  ]
        +}
    • Changeds3_create_bucket2 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"S3 account ID (if required; check via s3_get_users)"New value: +"Deprecated alias for s3uid"
      • addedInput schema / properties / s3uid
        Added value: +{
        +  "description": "S3 account UID; omit only if the token is bound to a single S3 account",
        +  "type": [
        +    "string",
        +    "number"
        +  ]
        +}
    • Changeds3_delete_account2 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"S3 account ID (if required; check via s3_get_users)"New value: +"Deprecated alias for s3uid"
      • addedInput schema / properties / s3uid
        Added value: +{
        +  "description": "S3 account UID; omit only if the token is bound to a single S3 account",
        +  "type": [
        +    "string",
        +    "number"
        +  ]
        +}
    • Changeds3_delete_bucket2 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"S3 account ID (if required; check via s3_get_users)"New value: +"Deprecated alias for s3uid"
      • addedInput schema / properties / s3uid
        Added value: +{
        +  "description": "S3 account UID; omit only if the token is bound to a single S3 account",
        +  "type": [
        +    "string",
        +    "number"
        +  ]
        +}
    • Changeds3_delete_file2 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"S3 account ID (if required; check via s3_get_users)"New value: +"Deprecated alias for s3uid"
      • addedInput schema / properties / s3uid
        Added value: +{
        +  "description": "S3 account UID; omit only if the token is bound to a single S3 account",
        +  "type": [
        +    "string",
        +    "number"
        +  ]
        +}
    • Changeds3_delete_payment_account2 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"S3 account ID (if required; check via s3_get_users)"New value: +"Deprecated alias for s3uid"
      • addedInput schema / properties / s3uid
        Added value: +{
        +  "description": "S3 account UID; omit only if the token is bound to a single S3 account",
        +  "type": [
        +    "string",
        +    "number"
        +  ]
        +}
    • Changeds3_get_buckets3 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"S3 account ID (if required; check via s3_get_users)"New value: +"Deprecated alias for s3uid; prefer s3uid"
      • addedInput schema / properties / s3uid
        Added value: +{
        +  "description": "S3 account UID (s3uid) from s3_get_users or create_account/order. Numeric id (e.g. 13457) or string uid.",
        +  "type": [
        +    "string",
        +    "number"
        +  ]
        +}
      • addedInput schema / required
        Added value: +[
        +  "s3uid"
        +]
    • Changeds3_get_buckets_via_queue3 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"S3 account ID (if required; check via s3_get_users)"New value: +"Deprecated alias for s3uid; prefer s3uid"
      • addedInput schema / properties / s3uid
        Added value: +{
        +  "description": "S3 account UID (s3uid) from s3_get_users or create_account/order. Numeric id (e.g. 13457) or string uid.",
        +  "type": [
        +    "string",
        +    "number"
        +  ]
        +}
      • addedInput schema / required
        Added value: +[
        +  "s3uid"
        +]
    • Changeds3_get_files2 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"S3 account ID (if required; check via s3_get_users)"New value: +"Deprecated alias for s3uid"
      • addedInput schema / properties / s3uid
        Added value: +{
        +  "description": "S3 account UID; omit only if the token is bound to a single S3 account",
        +  "type": [
        +    "string",
        +    "number"
        +  ]
        +}
    • Changeds3_show_key2 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"S3 account ID (if required; check via s3_get_users)"New value: +"Deprecated alias for s3uid"
      • addedInput schema / properties / s3uid
        Added value: +{
        +  "description": "S3 account UID; omit only if the token is bound to a single S3 account",
        +  "type": [
        +    "string",
        +    "number"
        +  ]
        +}
    • Changeds3_update_traffic_info2 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"S3 account ID (if required; check via s3_get_users)"New value: +"Deprecated alias for s3uid"
      • addedInput schema / properties / s3uid
        Added value: +{
        +  "description": "S3 account UID; omit only if the token is bound to a single S3 account",
        +  "type": [
        +    "string",
        +    "number"
        +  ]
        +}
  3. 117 tool updatesv1.0.3
    • Changedadd_dns_domain1 field changed
      • changedInput schema / properties / name / description
        Previous value: -"Имя домена, например example.com"New value: +"Domain name, e.g. example.com"
    • Changedadd_dns_record14 fields changed
      • changedInput schema / properties / content / description
        Previous value: -"Значение записи, например 10.56.121.5"New value: +"Record value, e.g. 10.56.121.5"
      • changedInput schema / properties / increase_soa_serial / description
        Previous value: -"Автоинкремент SOA-сериала (по умолчанию true)"New value: +"Auto-increment SOA serial (defaults to true)"
      • changedInput schema / properties / mname / description
        Previous value: -"Primary NS в SOA-записи"New value: +"Primary NS in the SOA record"
      • changedInput schema / properties / name / description
        Previous value: -"Имя записи, например www"New value: +"Record name, e.g. www"
      • changedInput schema / properties / old_name / description
        Previous value: -"Прежнее имя записи — для переименования"New value: +"Previous record name — for renaming"
      • changedInput schema / properties / port / description
        Previous value: -"Порт для SRV"New value: +"Port for SRV"
      • changedInput schema / properties / priority / description
        Previous value: -"Приоритет для SRV/MX"New value: +"Priority for SRV/MX"
      • changedInput schema / properties / proto / description
        Previous value: -"Протокол для SRV, например tcp"New value: +"Protocol for SRV, e.g. tcp"
      • changedInput schema / properties / rname / description
        Previous value: -"Email администратора в SOA-записи"New value: +"Admin email in the SOA record"
      • changedInput schema / properties / target / description
        Previous value: -"Целевой домен для SRV"New value: +"Target domain for SRV"
      • changedInput schema / properties / ttl / description
        Previous value: -"TTL в секундах, по умолчанию 3600"New value: +"TTL in seconds, defaults to 3600"
      • changedInput schema / properties / type / description
        Previous value: -"Тип записи: A, AAAA, CNAME, MX, TXT, SRV…"New value: +"Record type: A, AAAA, CNAME, MX, TXT, SRV…"
      • changedInput schema / properties / weight / description
        Previous value: -"Вес для SRV"New value: +"Weight for SRV"
      • changedInput schema / properties / zone / description
        Previous value: -"Имя зоны"New value: +"Zone name"
    • Changedadd_dns_subdomain3 fields changed
      • changedInput schema / properties / domain_id / description
        Previous value: -"ID домена из list_dns_domains"New value: +"Domain ID from list_dns_domains"
      • changedInput schema / properties / name / description
        Previous value: -"Имя сабдомена"New value: +"Subdomain name"
      • changedInput schema / properties / server_id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedadd_dns_zone10 fields changed
      • changedInput schema / properties / dns / description
        Previous value: -"SOA-параметры зоны; при пропуске применяются дефолты Hostkey"New value: +"SOA parameters for the zone; Hostkey defaults apply if omitted"
      • changedInput schema / properties / dns / properties / mname / description
        Previous value: -"Primary NS, например ns1.hostkey.com"New value: +"Primary NS, e.g. ns1.hostkey.com"
      • changedInput schema / properties / dns / properties / rname / description
        Previous value: -"Email администратора, например admin.example.com"New value: +"Admin email, e.g. admin.example.com"
      • changedInput schema / properties / dns / properties / serial / description
        Previous value: -"Сериал зоны, рекомендуется YYYYMMDD00"New value: +"Zone serial, recommended YYYYMMDD00"
      • changedInput schema / properties / dnssec / description
        Previous value: -"Включить DNSSEC (по умолчанию false)"New value: +"Enable DNSSEC (defaults to false)"
      • changedInput schema / properties / kind / description
        Previous value: -"Тип зоны, по умолчанию Master"New value: +"Zone type, defaults to Master"
      • changedInput schema / properties / masters / description
        Previous value: -"Список master-серверов (для Slave)"New value: +"List of master servers (for Slave)"
      • changedInput schema / properties / name / description
        Previous value: -"Имя зоны, например example.com"New value: +"Zone name, e.g. example.com"
      • changedInput schema / properties / nameservers / description
        Previous value: -"NS-серверы зоны, по умолчанию ns1.hostkey.com/ns2.hostkey.com"New value: +"NS servers for the zone, defaults to ns1.hostkey.com/ns2.hostkey.com"
      • changedInput schema / properties / rrsets / description
        Previous value: -"Использовать RRset вместо records (по умолчанию true)"New value: +"Use RRset instead of records (defaults to true)"
    • Changedadd_ipmi_user1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedadd_iso_image2 fields changed
      • changedInput schema / properties / name / description
        Previous value: -"Имя образа"New value: +"Image name"
      • changedInput schema / properties / url / description
        Previous value: -"URL образа, если требуется"New value: +"Image URL, if required"
    • Changedadd_rhr_comment2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID заявки из list_rhr_requests"New value: +"Request ID from list_rhr_requests"
      • changedInput schema / properties / message / description
        Previous value: -"Текст сообщения"New value: +"Message text"
    • Changedadd_static_nat1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedapply_credit2 fields changed
      • changedInput schema / properties / amount / description
        Previous value: -"Сумма оплаты в валюте аккаунта"New value: +"Payment amount in account currency"
      • changedInput schema / properties / invoice_id / description
        Previous value: -"Номер инвойса"New value: +"Invoice number"
    • Changedblock_ip4 fields changed
      • changedInput schema / properties / description / description
        Previous value: -"Причина блокировки"New value: +"Block reason"
      • changedInput schema / properties / four_hours / description
        Previous value: -"true — блокировка автоматически снимется через 4 часа"New value: +"true — block is automatically lifted after 4 hours"
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
      • changedInput schema / properties / ip / description
        Previous value: -"IP-адрес"New value: +"IP address"
    • Changedcall_api_raw5 fields changed
      • changedInput schema / properties / action / description
        Previous value: -"Действие ресурса, например: list"New value: +"Resource action, e.g.: list"
      • changedInput schema / properties / auth / description
        Previous value: -"Подставлять сессионный токен (по умолчанию true)"New value: +"Inject session token (defaults to true)"
      • changedInput schema / properties / confirm / description
        Previous value: -"Обязательное подтверждение. Без confirm=true вызов отклоняется."New value: +"Required confirmation. Without confirm=true the call is rejected."
      • changedInput schema / properties / params / description
        Previous value: -"Параметры вызова объектом; вложенные объекты превращаются в params[...]"New value: +"Call parameters as an object; nested objects become params[...]"
      • changedInput schema / properties / resource / description
        Previous value: -"Ресурс InvAPI без .php, например: iso, s3, rhr, eq, net, whmcs"New value: +"InvAPI resource without .php, e.g.: iso, s3, rhr, eq, net, whmcs"
    • Changedcheck_task1 field changed
      • changedInput schema / properties / key / description
        Previous value: -"Callback-ключ из ответа асинхронной операции"New value: +"Callback key from an async operation response"
    • Changedclear_pxe_config2 fields changed
      • changedInput schema / properties / hostname / description
        Previous value: -"Имя хоста сервера"New value: +"Server hostname"
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedclear_static_nat1 field changed
      • changedInput schema / properties / ip / description
        Previous value: -"Внутренний IP-адрес"New value: +"Internal IP address"
    • Changedcreate_addfunds_invoice1 field changed
      • changedInput schema / properties / amount / description
        Previous value: -"Сумма пополнения в валюте аккаунта"New value: +"Top-up amount in account currency"
    • Changedcreate_api_key6 fields changed
      • changedInput schema / properties / active / description
        Previous value: -"true — ключ активен"New value: +"true — key is active"
      • changedInput schema / properties / ip / description
        Previous value: -"Белый список IP, например 10.0.0.2, 10.4.6.3/24"New value: +"IP allowlist, e.g. 10.0.0.2, 10.4.6.3/24"
      • changedInput schema / properties / login_notify_address / description
        Previous value: -"Email или webhook URL для уведомлений"New value: +"Email or webhook URL for notifications"
      • changedInput schema / properties / login_notify_method / description
        Previous value: -"Уведомления о входах по ключу; для per-server ключа используйте none"New value: +"Login notifications for this key; use none for per-server keys"
      • changedInput schema / properties / name / description
        Previous value: -"Имя ключа"New value: +"Key name"
      • changedInput schema / properties / server_id / description
        Previous value: -"ID сервера; если не указан — ключ на весь аккаунт"New value: +"Server ID; omit for an account-wide key"
    • Changedcreate_pxe_config8 fields changed
      • changedInput schema / properties / hostname / description
        Previous value: -"Имя хоста"New value: +"Hostname"
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
      • changedInput schema / properties / os_id / description
        Previous value: -"ID ОС из list_os"New value: +"OS ID from list_os"
      • changedInput schema / properties / post_install_callback / description
        Previous value: -"URL callback после установки"New value: +"Callback URL after install"
      • changedInput schema / properties / post_install_script / description
        Previous value: -"Скрипт после установки"New value: +"Post-install script"
      • changedInput schema / properties / reinstall_key / description
        Previous value: -"Мастер-ключ из create_reinstall_task"New value: +"Master key from create_reinstall_task"
      • changedInput schema / properties / root_pass / description
        Previous value: -"Пароль root (мин. 8 символов, заглавная буква, цифра)"New value: +"Root password (min. 8 chars, uppercase letter, digit)"
      • changedInput schema / properties / ssh_key / description
        Previous value: -"Публичный SSH-ключ"New value: +"Public SSH key"
    • Changedcreate_reinstall_task1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedcreate_rhr_request3 fields changed
      • changedInput schema / properties / comment / description
        Previous value: -"Подробное описание требуемых работ"New value: +"Detailed description of the required work"
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
      • changedInput schema / properties / request_type / description
        Previous value: -"Тип работ, если задаётся справочником"New value: +"Work type, if set by a directory"
    • Changedcreate_snapshot2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID виртуальной машины"New value: +"Virtual machine ID"
      • changedInput schema / properties / name / description
        Previous value: -"Имя снапшота"New value: +"Snapshot name"
    • Changeddelete_api_key1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID ключа"New value: +"Key ID"
    • Changeddelete_cancellation_request1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changeddelete_contact1 field changed
      • changedInput schema / properties / contact_id / description
        Previous value: -"ID контакта"New value: +"Contact ID"
    • Changeddelete_dns_domain2 fields changed
      • changedInput schema / properties / domain_id / description
        Previous value: -"ID домена из list_dns_domains"New value: +"Domain ID from list_dns_domains"
      • changedInput schema / properties / server_id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changeddelete_dns_record3 fields changed
      • changedInput schema / properties / name / description
        Previous value: -"Имя записи"New value: +"Record name"
      • changedInput schema / properties / type / description
        Previous value: -"Тип записи"New value: +"Record type"
      • changedInput schema / properties / zone / description
        Previous value: -"Имя зоны"New value: +"Zone name"
    • Changeddelete_dns_subdomain2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сабдомена"New value: +"Subdomain ID"
      • changedInput schema / properties / server_id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changeddelete_dns_zone1 field changed
      • changedInput schema / properties / zone / description
        Previous value: -"Имя зоны"New value: +"Zone name"
    • Changeddelete_iso_image1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID ISO-образа"New value: +"ISO image ID"
    • Changeddiscard_rhr_request1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID заявки"New value: +"Request ID"
    • Changeddownload_invoice1 field changed
      • changedInput schema / properties / invoice_id / description
        Previous value: -"Номер инвойса"New value: +"Invoice number"
    • Changeddrop_nat2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID записи NAT"New value: +"NAT record ID"
      • changedInput schema / properties / ip / description
        Previous value: -"IP-адрес записи"New value: +"Record IP address"
    • Changededit_dns_subdomain2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сабдомена"New value: +"Subdomain ID"
      • changedInput schema / properties / server_id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedgenerate_due_invoice1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedget_api_key1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID ключа из list_api_keys"New value: +"Key ID from list_api_keys"
    • Changedget_api_key_history3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID ключа"New value: +"Key ID"
      • changedInput schema / properties / period_from / description
        Previous value: -"Начало периода, YYYY-MM-DD"New value: +"Period start, YYYY-MM-DD"
      • changedInput schema / properties / period_to / description
        Previous value: -"Конец периода, YYYY-MM-DD"New value: +"Period end, YYYY-MM-DD"
    • Changedget_cancellation_requests1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера (фильтр)"New value: +"Server ID (filter)"
    • Changedget_credit_history1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedget_dns_zone1 field changed
      • changedInput schema / properties / zone / description
        Previous value: -"Имя зоны, например example.com"New value: +"Zone name, e.g. example.com"
    • Changedget_invoice1 field changed
      • changedInput schema / properties / invoice_id / description
        Previous value: -"Номер инвойса"New value: +"Invoice number"
    • Changedget_ip_info1 field changed
      • changedInput schema / properties / ip / description
        Previous value: -"IP-адрес"New value: +"IP address"
    • Changedget_network_status1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedget_payment_gateway1 field changed
      • changedInput schema / properties / invoice_id / description
        Previous value: -"Номер инвойса"New value: +"Invoice number"
    • Changedget_port_graphs3 fields changed
      • changedInput schema / properties / graph / description
        Previous value: -"1 — день, 2 — месяц, 3 — год"New value: +"1 — day, 2 — month, 3 — year"
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
      • changedInput schema / properties / port / description
        Previous value: -"Физический порт свитча"New value: +"Physical switch port"
    • Changedget_power_status1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedget_preset1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID пресета; без него — список всех"New value: +"Preset ID; omit for full list"
    • Changedget_preset_pricing1 field changed
      • changedInput schema / properties / currencies / description
        Previous value: -"Коды валют через запятую, например EUR,USD. По умолчанию EUR"New value: +"Currency codes, comma-separated, e.g. EUR,USD. Default EUR"
    • Changedget_ptr_record2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
      • changedInput schema / properties / ip / description
        Previous value: -"IP-адрес"New value: +"IP address"
    • Changedget_server1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера в InvAPI"New value: +"Server ID in InvAPI"
    • Changedget_server_billing_data1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedget_server_invoices1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedget_server_sensors1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedget_server_tags1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedget_servers5 fields changed
      • changedInput schema / properties / group / description
        Previous value: -"Группы через запятую: VPS,Gpu,1CPU,2CPU,AMD,Instances,Storage,Nodes,Micro,Mini,Dell"New value: +"Groups, comma-separated: VPS,Gpu,1CPU,2CPU,AMD,Instances,Storage,Nodes,Micro,Mini,Dell"
      • changedInput schema / properties / ip / description
        Previous value: -"Найти сервер по IP-адресу"New value: +"Find server by IP address"
      • changedInput schema / properties / location / description
        Previous value: -"Коды локаций через запятую: NL,US,FI,DE,IS,TR,UK,ES,IT,PL,CH"New value: +"Location codes, comma-separated: NL,US,FI,DE,IS,TR,UK,ES,IT,PL,CH"
      • changedInput schema / properties / mac / description
        Previous value: -"Найти сервер по MAC-адресу"New value: +"Find server by MAC address"
      • changedInput schema / properties / status / description
        Previous value: -"Статус: rent (активный) или power_off (приостановлен)"New value: +"Status: rent (active) or power_off (suspended)"
    • Changedget_snapshots1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID виртуальной машины"New value: +"Virtual machine ID"
    • Changedget_stock_server1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID stock-сервера из list_stock_servers"New value: +"Stock server ID from list_stock_servers"
    • Changedget_transactions2 fields changed
      • changedInput schema / properties / invoice_id / description
        Previous value: -"Фильтр по инвойсу"New value: +"Filter by invoice"
      • changedInput schema / properties / transaction_id / description
        Previous value: -"Конкретная транзакция"New value: +"Specific transaction"
    • Changedget_vm_stats1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID виртуальной машины"New value: +"Virtual machine ID"
    • Changedget_vnc_console1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedlist_dns_subdomains1 field changed
      • changedInput schema / properties / server_id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedlist_iso_images3 fields changed
      • addedInput schema / properties / id
        Added value: +{
        +  "description": "Server ID in InvAPI (required)",
        +  "type": "integer"
        +}
      • removedInput schema / properties / server_id
        Removed value: -{
        -  "description": "ID сервера (обязателен для клиентских ключей)",
        -  "type": "integer"
        -}
      • addedInput schema / required
        Added value: +[
        +  "id"
        +]
    • Changedlist_os1 field changed
      • changedInput schema / properties / instance_id / description
        Previous value: -"ID пресета из list_presets"New value: +"Preset ID from list_presets"
    • Changedlist_presets1 field changed
      • changedInput schema / properties / location / description
        Previous value: -"Локация: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH"New value: +"Location: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH"
    • Changedlist_rhr_requests2 fields changed
      • changedInput schema / properties / location / description
        Previous value: -"Фильтр по локации, например NL"New value: +"Filter by location, e.g. NL"
      • changedInput schema / properties / status / description
        Previous value: -"Фильтр по статусу заявки"New value: +"Filter by request status"
    • Changedlist_server_api_keys1 field changed
      • changedInput schema / properties / server_id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedlist_software2 fields changed
      • changedInput schema / properties / instance_id / description
        Previous value: -"ID пресета из list_presets"New value: +"Preset ID from list_presets"
      • changedInput schema / properties / location / description
        Previous value: -"Локация: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH"New value: +"Location: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH"
    • Changedlist_stock_servers2 fields changed
      • changedInput schema / properties / group / description
        Previous value: -"Группа серверов; GPU-серверы не входят в остальные группы"New value: +"Server group; GPU servers are not included in other groups"
      • changedInput schema / properties / location / description
        Previous value: -"Локация: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH"New value: +"Location: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH"
    • Changedlist_traffic_plans2 fields changed
      • changedInput schema / properties / instance_id / description
        Previous value: -"ID пресета из list_presets"New value: +"Preset ID from list_presets"
      • changedInput schema / properties / location / description
        Previous value: -"Локация: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH"New value: +"Location: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH"
    • Changedmass_pay1 field changed
      • changedInput schema / properties / invoices / description
        Previous value: -"Массив номеров инвойсов"New value: +"Array of invoice numbers"
    • Changedmount_iso3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
      • changedInput schema / properties / iso_id / description
        Previous value: -"ID образа из list_iso_images"New value: +"Image ID from list_iso_images"
      • changedInput schema / properties / name / description
        Previous value: -"Имя образа (если используется идентификация по имени)"New value: +"Image name (if identifying by name)"
    • Changedorder_server16 fields changed
      • changedInput schema / properties / confirm / description
        Previous value: -"Обязателен (=true) для реального заказа"New value: +"Required (=true) for a real order"
      • changedInput schema / properties / deploy_notify / description
        Previous value: -"Уведомление о завершении деплоя на email (рекомендуется true)"New value: +"Email notification when deploy finishes (recommended true)"
      • changedInput schema / properties / deploy_period / description
        Previous value: -"Период оплаты"New value: +"Billing period"
      • changedInput schema / properties / dry_run / description
        Previous value: -"По умолчанию true: проверка параметров без создания заказа и списания средств"New value: +"Default true: validate parameters without placing an order or charging"
      • changedInput schema / properties / hostname / description
        Previous value: -"Имя хоста; по умолчанию генерируется из локации и ID"New value: +"Hostname; default is generated from location and ID"
      • changedInput schema / properties / location_name / description
        Previous value: -"Локация: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH"New value: +"Location: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH"
      • changedInput schema / properties / os_id / description
        Previous value: -"ID ОС из list_os"New value: +"OS ID from list_os"
      • changedInput schema / properties / own_os / description
        Previous value: -"1 — не устанавливать ОС (ручная установка)"New value: +"1 — do not install OS (manual install)"
      • changedInput schema / properties / post_install_callback / description
        Previous value: -"URL callback после деплоя"New value: +"Callback URL after deploy"
      • changedInput schema / properties / post_install_script / description
        Previous value: -"Скрипт, выполняемый после деплоя"New value: +"Script run after deploy"
      • changedInput schema / properties / preset / description
        Previous value: -"ID или имя пресета из list_presets (например, 108 или vm.pico)"New value: +"Preset ID or name from list_presets (e.g. 108 or vm.pico)"
      • changedInput schema / properties / promocode / description
        Previous value: -"Промокод на скидку"New value: +"Discount promocode"
      • changedInput schema / properties / root_pass / description
        Previous value: -"Пароль root: мин. 8 символов, заглавная буква, цифра, спецсимвол (кроме @ и #)"New value: +"Root password: min. 8 chars, uppercase, digit, special char (not @ or #)"
      • changedInput schema / properties / soft_id / description
        Previous value: -"ID ПО из list_software (опционально)"New value: +"Software ID from list_software (optional)"
      • changedInput schema / properties / ssh_key / description
        Previous value: -"Публичный SSH-ключ для root"New value: +"Public SSH key for root"
      • changedInput schema / properties / traffic_plan / description
        Previous value: -"ID трафик-плана из list_traffic_plans"New value: +"Traffic plan ID from list_traffic_plans"
    • Changedport_off2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
      • changedInput schema / properties / port / description
        Previous value: -"Физический порт свитча из get_network_status"New value: +"Physical switch port from get_network_status"
    • Changedport_on2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
      • changedInput schema / properties / port / description
        Previous value: -"Физический порт свитча из get_network_status"New value: +"Physical switch port from get_network_status"
    • Changedpower_off2 fields changed
      • changedInput schema / properties / confirm / description
        Previous value: -"Обязательное подтверждение операции. Без confirm=true вызов отклоняется."New value: +"Required confirmation. Without confirm=true the call is rejected."
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedpower_on2 fields changed
      • changedInput schema / properties / confirm / description
        Previous value: -"Обязательное подтверждение операции. Без confirm=true вызов отклоняется."New value: +"Required confirmation. Without confirm=true the call is rejected."
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedreboot_server2 fields changed
      • changedInput schema / properties / confirm / description
        Previous value: -"Обязательное подтверждение операции. Без confirm=true вызов отклоняется."New value: +"Required confirmation. Without confirm=true the call is rejected."
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedreinstall_server8 fields changed
      • changedInput schema / properties / confirm / description
        Previous value: -"Обязателен (=true) для запуска переустановки"New value: +"Required (=true) to start reinstall"
      • changedInput schema / properties / hostname / description
        Previous value: -"Текущий hostname сервера — служит подтверждением, что сервер выбран верно"New value: +"Current server hostname — confirms the correct server is selected"
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
      • changedInput schema / properties / os_id / description
        Previous value: -"ID новой ОС из list_os (0 + own_os=1 — без установки ОС)"New value: +"New OS ID from list_os (0 + own_os=1 — no OS install)"
      • changedInput schema / properties / own_os / description
        Previous value: -"1 — не устанавливать ОС"New value: +"1 — do not install OS"
      • changedInput schema / properties / root_pass / description
        Previous value: -"Новый пароль root"New value: +"New root password"
      • changedInput schema / properties / soft_id / description
        Previous value: -"ID ПО из list_software"New value: +"Software ID from list_software"
      • changedInput schema / properties / ssh_key / description
        Previous value: -"Публичный SSH-ключ для root"New value: +"Public SSH key for root"
    • Changedremove_ipmi_user1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedremove_snapshot2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID виртуальной машины"New value: +"Virtual machine ID"
      • changedInput schema / properties / name / description
        Previous value: -"Имя снапшота"New value: +"Snapshot name"
    • Changedremove_static_nat1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedrequest_cancellation3 fields changed
      • changedInput schema / properties / cancellation_type / description
        Previous value: -"1 — немедленно (частичный возврат при возможности), 0 — в конце биллинг-периода"New value: +"1 — immediate (partial refund if possible), 0 — at end of billing period"
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
      • changedInput schema / properties / terminate_reason_custom / description
        Previous value: -"Причина отмены"New value: +"Cancellation reason"
    • Changedrequest_rh_check1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedrequest_rh_kvm1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedrequest_rh_power_off1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedrequest_rh_power_on1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedrequest_rh_pxe_boot1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedrequest_rh_reboot1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedrequest_sales_assistance3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера, если запрос касается сервера"New value: +"Server ID, if the request concerns a server"
      • changedInput schema / properties / message / description
        Previous value: -"Детали запроса: что отменить/перенести и почему"New value: +"Request details: what to cancel/transfer and why"
      • changedInput schema / properties / subject / description
        Previous value: -"Тема запроса"New value: +"Request subject"
    • Changedreset_billing_password1 field changed
      • changedInput schema / properties / email / description
        Previous value: -"Email аккаунта"New value: +"Account email"
    • Changedreset_ipmi1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedrestore_snapshot2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID виртуальной машины"New value: +"Virtual machine ID"
      • changedInput schema / properties / name / description
        Previous value: -"Имя снапшота"New value: +"Snapshot name"
    • Changedrun_post_install_task3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
      • changedInput schema / properties / params / description
        Previous value: -"Дополнительные параметры задачи"New value: +"Additional task parameters"
      • changedInput schema / properties / task / description
        Previous value: -"ID или имя задачи из list_post_install_tasks"New value: +"Task ID or name from list_post_install_tasks"
    • Changeds3_cancel_account_deletion1 field changed
      • changedInput schema / properties / account_id / description
        Previous value: -"ID S3-аккаунта (если требуется; уточняйте через s3_get_users)"New value: +"S3 account ID (if required; check via s3_get_users)"
    • Changeds3_create_account3 fields changed
      • changedInput schema / properties / bucket / description
        Previous value: -"Имя начального бакета"New value: +"Initial bucket name"
      • changedInput schema / properties / location / description
        Previous value: -"Локация из s3_get_locations"New value: +"Location from s3_get_locations"
      • changedInput schema / properties / plan_id / description
        Previous value: -"ID тарифного плана из s3_list_plans"New value: +"Plan ID from s3_list_plans"
    • Changeds3_create_bucket2 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"ID S3-аккаунта (если требуется; уточняйте через s3_get_users)"New value: +"S3 account ID (if required; check via s3_get_users)"
      • changedInput schema / properties / bucket / description
        Previous value: -"Имя бакета"New value: +"Bucket name"
    • Changeds3_create_order2 fields changed
      • changedInput schema / properties / location / description
        Previous value: -"Локация"New value: +"Location"
      • changedInput schema / properties / plan_id / description
        Previous value: -"ID тарифного плана"New value: +"Plan ID"
    • Changeds3_delete_account1 field changed
      • changedInput schema / properties / account_id / description
        Previous value: -"ID S3-аккаунта (если требуется; уточняйте через s3_get_users)"New value: +"S3 account ID (if required; check via s3_get_users)"
    • Changeds3_delete_bucket2 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"ID S3-аккаунта (если требуется; уточняйте через s3_get_users)"New value: +"S3 account ID (if required; check via s3_get_users)"
      • changedInput schema / properties / bucket / description
        Previous value: -"Имя бакета"New value: +"Bucket name"
    • Changeds3_delete_file3 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"ID S3-аккаунта (если требуется; уточняйте через s3_get_users)"New value: +"S3 account ID (if required; check via s3_get_users)"
      • changedInput schema / properties / bucket / description
        Previous value: -"Имя бакета"New value: +"Bucket name"
      • changedInput schema / properties / file / description
        Previous value: -"Ключ (имя) файла"New value: +"File key (name)"
    • Changeds3_delete_payment_account1 field changed
      • changedInput schema / properties / account_id / description
        Previous value: -"ID S3-аккаунта (если требуется; уточняйте через s3_get_users)"New value: +"S3 account ID (if required; check via s3_get_users)"
    • Changeds3_get_buckets1 field changed
      • changedInput schema / properties / account_id / description
        Previous value: -"ID S3-аккаунта (если требуется; уточняйте через s3_get_users)"New value: +"S3 account ID (if required; check via s3_get_users)"
    • Changeds3_get_buckets_via_queue1 field changed
      • changedInput schema / properties / account_id / description
        Previous value: -"ID S3-аккаунта (если требуется; уточняйте через s3_get_users)"New value: +"S3 account ID (if required; check via s3_get_users)"
    • Changeds3_get_files5 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"ID S3-аккаунта (если требуется; уточняйте через s3_get_users)"New value: +"S3 account ID (if required; check via s3_get_users)"
      • changedInput schema / properties / bucket / description
        Previous value: -"Имя бакета"New value: +"Bucket name"
      • changedInput schema / properties / limit / description
        Previous value: -"Размер страницы"New value: +"Page size"
      • changedInput schema / properties / page / description
        Previous value: -"Номер страницы"New value: +"Page number"
      • changedInput schema / properties / search / description
        Previous value: -"Поисковая строка по имени файла"New value: +"Search string by file name"
    • Changeds3_get_users1 field changed
      • changedInput schema / properties / location / description
        Previous value: -"Фильтр по локации (для администраторов)"New value: +"Filter by location (for administrators)"
    • Changeds3_list_plans1 field changed
      • changedInput schema / properties / location / description
        Previous value: -"Локация (фильтр), если поддерживается"New value: +"Location (filter), if supported"
    • Changeds3_show_key2 fields changed
      • changedInput schema / properties / account_id / description
        Previous value: -"ID S3-аккаунта (если требуется; уточняйте через s3_get_users)"New value: +"S3 account ID (if required; check via s3_get_users)"
      • changedInput schema / properties / key_type / description
        Previous value: -"Тип ключа"New value: +"Key type"
    • Changeds3_update_traffic_info1 field changed
      • changedInput schema / properties / account_id / description
        Previous value: -"ID S3-аккаунта (если требуется; уточняйте через s3_get_users)"New value: +"S3 account ID (if required; check via s3_get_users)"
    • Changedsearch_presets3 fields changed
      • changedInput schema / properties / location / description
        Previous value: -"Локация: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH"New value: +"Location: NL/US/FI/DE/IS/TR/UK/ES/IT/PL/CH"
      • changedInput schema / properties / name / description
        Previous value: -"Имя пресета, например vm.pico"New value: +"Preset name, e.g. vm.pico"
      • changedInput schema / properties / scope / description
        Previous value: -"free (по умолчанию) — только свободные"New value: +"free (default) — available only"
    • Changedsearch_servers_by_tag1 field changed
      • changedInput schema / properties / value / description
        Previous value: -"Шаблон поиска по тегам"New value: +"Tag search pattern"
    • Changedset_boot_device2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
      • changedInput schema / properties / media / description
        Previous value: -"Устройство загрузки"New value: +"Boot device"
    • Changedset_main_ip3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
      • changedInput schema / properties / ip / description
        Previous value: -"IP-адрес"New value: +"IP address"
      • changedInput schema / properties / main / description
        Previous value: -"IP-адрес, который станет основным"New value: +"IP address that will become primary"
    • Changedstart_novnc2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
      • changedInput schema / properties / white_ip / description
        Previous value: -"IP, с которого разрешено подключение"New value: +"IP allowed to connect from"
    • Changedunblock_ip2 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
      • changedInput schema / properties / ip / description
        Previous value: -"IP-адрес"New value: +"IP address"
    • Changedunmount_iso1 field changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
    • Changedupdate_api_key5 fields changed
      • changedInput schema / properties / active / description
        Previous value: -"true — ключ активен"New value: +"true — key is active"
      • changedInput schema / properties / id / description
        Previous value: -"ID ключа"New value: +"Key ID"
      • changedInput schema / properties / ip / description
        Previous value: -"Белый список IP"New value: +"IP allowlist"
      • changedInput schema / properties / login_notify_method / description
        Previous value: -"Способ уведомлений о входах"New value: +"Login notification method"
      • changedInput schema / properties / name / description
        Previous value: -"Имя ключа"New value: +"Key name"
    • Changedupdate_contact4 fields changed
      • changedInput schema / properties / contact_id / description
        Previous value: -"ID контакта"New value: +"Contact ID"
      • changedInput schema / properties / email / description
        Previous value: -"Email контакта"New value: +"Contact email"
      • changedInput schema / properties / password2 / description
        Previous value: -"Новый пароль контакта"New value: +"New contact password"
      • changedInput schema / properties / phonenumber / description
        Previous value: -"Телефон (включает 2FA по SMS)"New value: +"Phone (enables SMS 2FA)"
    • Changedupdate_ptr_record3 fields changed
      • changedInput schema / properties / id / description
        Previous value: -"ID сервера"New value: +"Server ID"
      • changedInput schema / properties / ip / description
        Previous value: -"IP-адрес"New value: +"IP address"
      • changedInput schema / properties / ptr / description
        Previous value: -"Новое значение PTR"New value: +"New PTR value"
    • Changedupload_iso2 fields changed
      • changedInput schema / properties / name / description
        Previous value: -"Имя образа в библиотеке"New value: +"Image name in the library"
      • changedInput schema / properties / url / description
        Previous value: -"Прямой URL ISO-образа"New value: +"Direct URL of the ISO image"
  4. 132 tool updatesv1.0.1
    • First observedadd_contact
    • First observedadd_dns_domain
    • First observedadd_dns_record
    • First observedadd_dns_subdomain
    • First observedadd_dns_zone
    • First observedadd_ipmi_user
    • First observedadd_iso_image
    • First observedadd_rhr_comment
    • First observedadd_static_nat
    • First observedapply_credit
    • First observedblock_ip
    • First observedcall_api_raw
    • First observedcheck_task
    • First observedclear_pxe_config
    • First observedclear_static_nat
    • First observedcreate_addfunds_invoice
    • First observedcreate_api_key
    • First observedcreate_pxe_config
    • First observedcreate_reinstall_task
    • First observedcreate_rhr_request
    • First observedcreate_snapshot
    • First observeddelete_api_key
    • First observeddelete_cancellation_request
    • First observeddelete_contact
    • First observeddelete_dns_domain
    • First observeddelete_dns_record
    • First observeddelete_dns_subdomain
    • First observeddelete_dns_zone
    • First observeddelete_iso_image
    • First observeddiscard_rhr_request
    • First observeddownload_invoice
    • First observeddrop_nat
    • First observededit_dns_subdomain
    • First observedgenerate_due_invoice
    • First observedget_account_info
    • First observedget_api_key
    • First observedget_api_key_history
    • First observedget_billing_client
    • First observedget_cancellation_requests
    • First observedget_contacts
    • First observedget_credit_history
    • First observedget_dns_zone
    • First observedget_invoice
    • First observedget_invoices
    • First observedget_ip_info
    • First observedget_network_status
    • First observedget_payment_gateway
    • First observedget_port_graphs
    • First observedget_power_status
    • First observedget_preset
    • First observedget_preset_pricing
    • First observedget_ptr_record
    • First observedget_server
    • First observedget_server_billing_data
    • First observedget_server_invoices
    • First observedget_server_sensors
    • First observedget_server_tags
    • First observedget_servers
    • First observedget_snapshots
    • First observedget_stock_server
    • First observedget_transactions
    • First observedget_uploaded_isos
    • First observedget_vm_engine
    • First observedget_vm_stats
    • First observedget_vnc_console
    • First observedlist_api_keys
    • First observedlist_dns_domains
    • First observedlist_dns_subdomains
    • First observedlist_dns_zones
    • First observedlist_iso_images
    • First observedlist_os
    • First observedlist_post_install_tasks
    • First observedlist_preset_groups
    • First observedlist_presets
    • First observedlist_rhr_requests
    • First observedlist_server_api_keys
    • First observedlist_software
    • First observedlist_stock_servers
    • First observedlist_traffic_plans
    • First observedlogout
    • First observedmass_pay
    • First observedmount_iso
    • First observedorder_server
    • First observedport_off
    • First observedport_on
    • First observedpower_off
    • First observedpower_on
    • First observedreboot_server
    • First observedreinstall_server
    • First observedremove_ipmi_user
    • First observedremove_snapshot
    • First observedremove_static_nat
    • First observedrequest_cancellation
    • First observedrequest_rh_check
    • First observedrequest_rh_kvm
    • First observedrequest_rh_power_off
    • First observedrequest_rh_power_on
    • First observedrequest_rh_pxe_boot
    • First observedrequest_rh_reboot
    • First observedrequest_sales_assistance
    • First observedreset_billing_password
    • First observedreset_ipmi
    • First observedrestore_snapshot
    • First observedrun_post_install_task
    • First observeds3_cancel_account_deletion
    • First observeds3_create_account
    • First observeds3_create_bucket
    • First observeds3_create_order
    • First observeds3_delete_account
    • First observeds3_delete_bucket
    • First observeds3_delete_file
    • First observeds3_delete_payment_account
    • First observeds3_get_buckets
    • First observeds3_get_buckets_via_queue
    • First observeds3_get_files
    • First observeds3_get_locations
    • First observeds3_get_users
    • First observeds3_list_plans
    • First observeds3_show_key
    • First observeds3_update_traffic_info
    • First observedsearch_presets
    • First observedsearch_servers_by_tag
    • First observedset_boot_device
    • First observedset_main_ip
    • First observedstart_novnc
    • First observedunblock_ip
    • First observedunmount_iso
    • First observedupdate_api_key
    • First observedupdate_billing_client
    • First observedupdate_contact
    • First observedupdate_ptr_record
    • First observedupload_iso

TDQS

B3.1/5.0

Scored across 132 tools

Disambiguation3/5

Most tools map to distinct resource/action pairs, but several areas overlap: s3_get_buckets and s3_get_buckets_via_queue are explicitly duplicative, preset listing/getting/searching is split across multiple tools, and Remote Hands power/reboot requests sit alongside direct power/reboot tools. call_api_raw also overlaps with nearly every typed tool, so misselection is plausible despite generally helpful descriptions.

Naming Consistency4/5

The set is predominantly snake_case with recognizable resource prefixes such as s3_, request_rh_, and dns. There are minor inconsistencies in verb choice (get vs list vs show) and some bare or abbreviated names like mass_pay, logout, and rhr, but the convention remains readable overall.

Tool Count1/5

132 tools is far beyond a manageable surface and exceeds the rubric's 50+ extreme-mismatch threshold. Even for a broad hosting platform, the presence of call_api_raw suggests the typed surface could have been kept much smaller.

Completeness4/5

Coverage is broad across server lifecycle, billing, DNS, S3, networking, IPMI, snapshots, ISO management, API keys, and Remote Hands. Some operations are permission-gated, staff-only, or only available through call_api_raw, but overall the domain has few dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers