Skip to main content
Glama
lazyants
by lazyants

hetzner-mcp-server

Tests

MCP server for the Hetzner Cloud API. Manage servers, networks, volumes, firewalls, load balancers, and more through the Model Context Protocol.

185 tools across 15 resource domains, with 9 entry points so you can pick the right server for your MCP client's tool limit. A read-only API-reference Resource (reference://hetzner/api) is also exposed on every entry point.

Installation

npm install -g @lazyants/hetzner-mcp-server

Or run directly:

npx @lazyants/hetzner-mcp-server

Related MCP server: hcloud-mcp

Configuration

Set your Hetzner Cloud API token:

export HETZNER_API_TOKEN=your-token-here

Get a token from the Hetzner Cloud Console under Security > API Tokens.

The Storage Box tools call a separate host (https://api.hetzner.com/v1). They use HETZNER_STORAGE_API_TOKEN if set, otherwise fall back to HETZNER_API_TOKEN, so a single token keeps working. Set HETZNER_STORAGE_API_TOKEN only if you scope Storage Box access to a dedicated token:

export HETZNER_STORAGE_API_TOKEN=your-storage-token-here  # optional

Entry Points

Command

Domains

Tools

hetzner-mcp-server

All 15 domains

185

hetzner-mcp-servers

Servers, Locations/Server Types, Pricing

33

hetzner-mcp-networking

Networks, Firewalls

23

hetzner-mcp-load-balancers

Load Balancers, Certificates

29

hetzner-mcp-ips

Floating IPs, Primary IPs

21

hetzner-mcp-storage

Volumes, Images

18

hetzner-mcp-storage-boxes

Storage Boxes (+ snapshots, subaccounts, types)

30

hetzner-mcp-config

SSH Keys, ISOs, Placement Groups

15

hetzner-mcp-dns

DNS Zones

23

Every entry point includes hetzner_wait_for_action; the full server registers it once.

Use split servers to reduce context size — pick only the splits you need.

Claude Code

Add to ~/.claude/settings.json:

{
  "mcpServers": {
    "hetzner": {
      "command": "npx",
      "args": ["-y", "@lazyants/hetzner-mcp-server"],
      "env": {
        "HETZNER_API_TOKEN": "your-token-here"
      }
    }
  }
}

Or use split servers (pick the splits you need):

{
  "mcpServers": {
    "hetzner-servers": {
      "command": "npx",
      "args": ["-y", "-p", "@lazyants/hetzner-mcp-server", "hetzner-mcp-servers"],
      "env": { "HETZNER_API_TOKEN": "your-token-here" }
    },
    "hetzner-networking": {
      "command": "npx",
      "args": ["-y", "-p", "@lazyants/hetzner-mcp-server", "hetzner-mcp-networking"],
      "env": { "HETZNER_API_TOKEN": "your-token-here" }
    }
  }
}

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "hetzner": {
      "command": "npx",
      "args": ["-y", "@lazyants/hetzner-mcp-server"],
      "env": {
        "HETZNER_API_TOKEN": "your-token-here"
      }
    }
  }
}

Tools

Primary list tools expose sort for servers, volumes, networks, firewalls, load balancers, IPs, certificates, SSH keys, and placement groups. Image listing also supports bound_to (one server ID or an array) and include_deprecated. Server and load-balancer metrics accept step in seconds; network creation accepts expose_routes_to_vswitch.

Set resource on hetzner_get_pricing to server_types, load_balancer_types, volume, floating_ips, primary_ips, traffic, image, or server_backup to reduce the response. Filtered results preserve currency and VAT; traffic selects location-specific included traffic and additional traffic prices for server and load-balancer types.

Action waiting (1 shared tool) — every entry point

hetzner_wait_for_action accepts domain, resource_id, action_id, and an optional timeout in seconds (default 300, maximum 3600). It polls paginated per-resource action history and returns the full action when its status becomes success or error; missing or unknown statuses keep waiting until timeout. Supported domains are servers, load_balancers, volumes, networks, firewalls, floating_ips, primary_ips, certificates, images, zones, and storage_boxes; Storage Boxes use their separate API host. The deadline bounds requests and rate-limit delays, and MCP cancellation stops the wait.

Servers (27 tools) — servers

hetzner_list_servers, hetzner_get_server, hetzner_create_server, hetzner_update_server, hetzner_delete_server, hetzner_power_on, hetzner_power_off, hetzner_reboot, hetzner_reset, hetzner_shutdown, hetzner_rebuild_server, hetzner_resize_server, hetzner_enable_rescue, hetzner_disable_rescue, hetzner_get_server_metrics, hetzner_list_server_actions, hetzner_change_server_protection, hetzner_request_console, hetzner_enable_backup, hetzner_disable_backup, hetzner_change_alias_ips, hetzner_change_dns_ptr, hetzner_attach_server_to_network, hetzner_detach_server_from_network, hetzner_add_server_to_placement_group, hetzner_remove_server_from_placement_group, hetzner_reset_server_password

Images (7 tools) — storage

hetzner_list_images, hetzner_get_image, hetzner_update_image, hetzner_delete_image, hetzner_create_image, hetzner_change_image_protection, hetzner_list_image_actions

ISOs (4 tools) — config

hetzner_list_isos, hetzner_get_iso, hetzner_attach_iso, hetzner_detach_iso

Placement Groups (5 tools) — config

hetzner_list_placement_groups, hetzner_get_placement_group, hetzner_create_placement_group, hetzner_update_placement_group, hetzner_delete_placement_group

Reference Data (5 tools) — servers

hetzner_list_locations, hetzner_get_location, hetzner_list_server_types, hetzner_get_server_type, hetzner_get_pricing

Hetzner removed the /datacenters endpoints after 2026-10-01 (HTTP 410), and this server no longer exposes hetzner_list_datacenters or hetzner_get_datacenter. Use hetzner_list_server_types (locations[].available/recommended) and hetzner_list_locations for availability and region information.

Networks (13 tools) — networking

hetzner_list_networks, hetzner_list_network_members, hetzner_get_network, hetzner_create_network, hetzner_update_network, hetzner_delete_network, hetzner_add_subnet, hetzner_delete_subnet, hetzner_add_route, hetzner_delete_route, hetzner_change_network_protection, hetzner_change_ip_range, hetzner_list_network_actions

hetzner_list_network_members returns attached servers and load balancers with IPs, aliases, subnet, and attachment status. Pass a string or array for type, subnet, status, and sort; arrays produce repeated query keys. Results include the API's pagination metadata.

Firewalls (9 tools) — networking

hetzner_list_firewalls, hetzner_get_firewall, hetzner_create_firewall, hetzner_update_firewall, hetzner_delete_firewall, hetzner_set_firewall_rules, hetzner_apply_firewall, hetzner_remove_firewall, hetzner_list_firewall_actions

Load Balancers (21 tools) — load-balancers

hetzner_list_load_balancers, hetzner_get_load_balancer, hetzner_create_load_balancer, hetzner_update_load_balancer, hetzner_delete_load_balancer, hetzner_add_lb_target, hetzner_remove_lb_target, hetzner_add_lb_service, hetzner_update_lb_service, hetzner_delete_lb_service, hetzner_change_lb_algorithm, hetzner_change_lb_type, hetzner_attach_lb_to_network, hetzner_detach_lb_from_network, hetzner_get_lb_metrics, hetzner_list_lb_types, hetzner_change_load_balancer_protection, hetzner_list_load_balancer_actions, hetzner_enable_lb_public_interface, hetzner_disable_lb_public_interface, hetzner_change_lb_dns_ptr

Certificates (7 tools) — load-balancers

hetzner_list_certificates, hetzner_get_certificate, hetzner_create_certificate, hetzner_update_certificate, hetzner_delete_certificate, hetzner_retry_certificate, hetzner_list_certificate_actions

Volumes (10 tools) — storage

hetzner_list_volumes, hetzner_get_volume, hetzner_create_volume, hetzner_update_volume, hetzner_delete_volume, hetzner_attach_volume, hetzner_detach_volume, hetzner_resize_volume, hetzner_change_volume_protection, hetzner_list_volume_actions

Floating IPs (10 tools) — ips

hetzner_list_floating_ips, hetzner_get_floating_ip, hetzner_create_floating_ip, hetzner_update_floating_ip, hetzner_delete_floating_ip, hetzner_assign_floating_ip, hetzner_unassign_floating_ip, hetzner_change_floating_ip_rdns, hetzner_change_floating_ip_protection, hetzner_list_floating_ip_actions

Primary IPs (10 tools) — ips

hetzner_list_primary_ips, hetzner_get_primary_ip, hetzner_create_primary_ip, hetzner_update_primary_ip, hetzner_delete_primary_ip, hetzner_assign_primary_ip, hetzner_unassign_primary_ip, hetzner_change_primary_ip_rdns, hetzner_change_primary_ip_protection, hetzner_list_primary_ip_actions

SSH Keys (5 tools) — config

hetzner_list_ssh_keys, hetzner_get_ssh_key, hetzner_create_ssh_key, hetzner_update_ssh_key, hetzner_delete_ssh_key

DNS Zones (22 tools) — dns

hetzner_list_zones, hetzner_get_zone, hetzner_create_zone, hetzner_update_zone, hetzner_delete_zone, hetzner_change_zone_protection, hetzner_change_zone_ttl, hetzner_change_zone_primary_nameservers, hetzner_export_zonefile, hetzner_import_zonefile, hetzner_list_zone_actions, hetzner_list_zone_rrsets, hetzner_get_zone_rrset, hetzner_create_zone_rrset, hetzner_update_zone_rrset, hetzner_delete_zone_rrset, hetzner_change_zone_rrset_protection, hetzner_change_zone_rrset_ttl, hetzner_add_zone_rrset_records, hetzner_remove_zone_rrset_records, hetzner_set_zone_rrset_records, hetzner_update_zone_rrset_records

Storage Boxes (29 tools) — storage-boxes

Storage Boxes use the https://api.hetzner.com/v1 host. Token: HETZNER_STORAGE_API_TOKEN (falls back to HETZNER_API_TOKEN).

hetzner_list_storage_boxes, hetzner_create_storage_box, hetzner_get_storage_box, hetzner_update_storage_box, hetzner_delete_storage_box, hetzner_list_storage_box_folders, hetzner_list_storage_box_actions, hetzner_change_storage_box_protection, hetzner_change_storage_box_type, hetzner_reset_storage_box_password, hetzner_update_storage_box_access_settings, hetzner_rollback_storage_box_snapshot, hetzner_enable_storage_box_snapshot_plan, hetzner_disable_storage_box_snapshot_plan, hetzner_list_storage_box_types, hetzner_get_storage_box_type, hetzner_list_storage_box_snapshots, hetzner_create_storage_box_snapshot, hetzner_get_storage_box_snapshot, hetzner_update_storage_box_snapshot, hetzner_delete_storage_box_snapshot, hetzner_list_storage_box_subaccounts, hetzner_create_storage_box_subaccount, hetzner_get_storage_box_subaccount, hetzner_update_storage_box_subaccount, hetzner_delete_storage_box_subaccount, hetzner_change_storage_box_subaccount_home_directory, hetzner_reset_storage_box_subaccount_password, hetzner_update_storage_box_subaccount_access_settings

Security

  • Never commit your API token to version control

  • Use read-only tokens when you only need to list/get resources

  • Create and delete tools cost real money — Hetzner bills for provisioned resources

  • The server handles rate limiting automatically (3,600 requests/hour, exponential backoff on 429)

Disclaimer

Create, update, and delete operations may incur charges on your Hetzner Cloud account. Use read-only API tokens when possible. The authors are not responsible for any costs incurred.

Releasing

Releases ship via the GitHub Release event. Maintainer flow:

  1. Bump the version in package.json and server.json (both #/version and #/packages[0].version), then run npm install --package-lock-only to sync package-lock.json. node scripts/check-versions.mjs hard-fails unless package.json#/version matches server.json#/packages[0].version; server.json#/version is checked loosely — it may legitimately be ahead (registry-only republishes bump just that field), so a stale value passes with a WARN: line and no failure. Read the script's output rather than trusting its exit code. CHANGELOG.md is not checked at all.

  2. Update CHANGELOG.md.

  3. Commit, and merge the version bump to main before creating the release. Then create the tag yourself, on a SHA you have checked, and only then create the release from it:

    V=X.Y.Z && PR=<release-pr-number> &&
      SHA="$(gh pr view "$PR" --json mergeCommit -q .mergeCommit.oid)" && test -n "$SHA" &&
      git fetch origin main && git merge-base --is-ancestor "$SHA" origin/main &&
      PKG="$(git show "$SHA:package.json")" &&
      test "$(printf '%s' "$PKG" | node -pe 'JSON.parse(require("fs").readFileSync(0,"utf8")).version')" = "$V" &&
      CL="$(git show "$SHA:CHANGELOG.md")" &&
      printf '%s\n' "$CL" | awk -v v="$V" 'index($0,"## ["v"]")==1{f=1;next} /^## \[/{f=0} /^\[[0-9]+\.[0-9]+\.[0-9]+\]:/{f=0} f' > "/tmp/notes-v$V.md" &&
      grep -q '[^[:space:]]' "/tmp/notes-v$V.md" &&
      git tag -a "v$V" "$SHA" -m "v$V" &&
      git push origin "v$V" &&
      gh release create "v$V" --verify-tag --notes-file "/tmp/notes-v$V.md"

    Never run a bare gh release create vX.Y.Z. With no existing tag it places one on the tip of the default branch, so running it while the bump is still on a release branch tags the previous release's commit. The workflow then publishes whatever version it finds in that commit's package.json, and you get a vX.Y.Z GitHub Release that silently republishes the old version. The publish workflow now refuses to continue when GITHUB_REF_NAME is not v<package.json version>, so that exact scenario fails before npm publish rather than silently republishing. The sequence above is still required, and guards a case the workflow cannot: the workflow guard only runs once a release already exists, and it passes for any commit carrying the right version — so it catches a mis-tagged release, not the wrong commit being tagged.

    Each element is load-bearing:

    • gh pr view … .mergeCommit.oid names the release PR's own squash commit. Do not substitute git rev-parse origin/main — that is merely whatever is on main at the moment you look, so an unrelated merge landing in the gap gets tagged and shipped instead. gh exits 0 and prints nothing for an unmerged PR, hence the explicit test -n.

    • The && chain stops on the first failure instead of falling through to the irreversible step. Both git show calls are assigned to a variable rather than piped directly, so their exit status is actually checked — a pipeline reports only its last command's status unless pipefail is set, which is not assumed here.

    • git merge-base --is-ancestor proves the commit is reachable from main. Mere existence is not enough — a commit can be present locally because some other branch was fetched.

    • The version test reads package.json out of the target commit, not the working tree, which would still show the right version while $SHA pointed elsewhere.

    • The awk lifts that version's section out of the commit's CHANGELOG.md for --notes-file. It stops at the next ## [ heading or at the first link-reference definition, because the oldest entry has no heading after it and would otherwise swallow the entire link-reference block. grep -q rather than test -s guards the result: a section empty apart from its blank line still produces a one-byte file, which test -s accepts.

  4. The Publish to npm + MCP Registry workflow runs automatically: it npm publishes with provenance, polls the registry until the tarball is available, then pushes the matching server.json to the MCP Registry via mcp-publisher.

The workflow skips npm publish cleanly if the version is already on npm (cutover guard for releases that were partially published manually).

npm authentication

Publishing uses npm Trusted Publishing: the workflow's GitHub OIDC token (id-token: write) is exchanged for a one-shot publish token at runtime. No NPM_TOKEN secret needs to live in the repo.

The binding is configured in the npm web UI (package → Trusted Publishers): provider GitHub Actions, organization lazyants, repository hetzner-mcp-server, workflow publish-registry.yml.

License

FSL-1.1-MIT — see LICENSE for the full terms. Versions 1.1.1 and earlier remain MIT-licensed.

Available Tools

185 tools
hetzner_add_lb_serviceAdd Load Balancer ServiceC

Add a service (port listener with forwarding rules) to a load balancer.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
httpNoHTTP-specific service settings
protocolYesService protocol: tcp, http, or https
listen_portYesPort the load balancer listens on
health_checkNoHealth check configuration
proxyprotocolNoEnable PROXY protocol
destination_portYesPort traffic is forwarded to

TDQS

C2.9/5.0
Behavior2/5

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

Annotations indicate mutation (readOnlyHint=false) but not destructive (destructiveHint=false). The description adds no behavioral details beyond 'add', such as whether the operation is idempotent, whether it requires specific permissions, or what side effects occur.

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, clear sentence that conveys the core purpose without extraneous words. It could be slightly expanded to include key behavioral notes, but remains efficient.

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?

The description lacks details on return values (no output schema), error conditions, or examples. For a complex tool with nested objects, this is insufficient for an agent to fully understand the outcome.

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 parameters are well-documented in the schema. The description adds minimal extra meaning (e.g., 'port listener with forwarding rules') but does not enhance understanding 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 clearly states 'Add a service (port listener with forwarding rules) to a load balancer,' using a specific verb and resource. It distinguishes from sibling tools like 'hetzner_delete_lb_service' and 'hetzner_create_load_balancer', though it does not explicitly differentiate from 'hetzner_update_lb_service'.

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 guidance on when to use this tool versus alternatives, no prerequisites (e.g., load balancer must exist), and no context on idempotency or ordering.

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

hetzner_add_lb_targetAdd Load Balancer TargetB

Add a target (server, label selector, or IP) to a load balancer.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
ipNoIP target
typeYesTarget type
serverNoServer target
label_selectorNoLabel selector target
use_private_ipNoUse private IP for the target

TDQS

B3.3/5.0
Behavior2/5

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

Beyond annotations (readOnlyHint=false, openWorldHint=true), the description adds no behavioral details such as idempotency, side effects of adding an existing target, or mutation behavior. It does not contradict annotations but provides minimal additional 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, well-structured sentence that is front-loaded and precisely conveys the tool's function with no wasted words.

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?

While the schema fully documents parameters, there is no output schema or description of return values. For a moderately complex tool with nested objects, the description is complete regarding input but lacks context on what happens after adding a target (e.g., success/failure indications).

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 all parameters. The description only lists target types parenthetically, adding no additional semantic meaning beyond what is in the schema. Baseline 3 is 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?

The description clearly states the verb 'Add', the resource 'a target (server, label selector, or IP)', and the context 'to a load balancer'. It effectively distinguishes from sibling tools like 'hetzner_add_lb_service' which adds a service to a load balancer.

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 or prerequisites (e.g., the load balancer must exist). With many sibling tools, this lack of context could lead to incorrect tool selection.

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

hetzner_add_routeAdd Route to NetworkB

Add a route to an existing network.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
gatewayYesGateway for the route
destinationYesDestination network of the route

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already indicate non-readOnly (modifying) and non-destructive. The description confirms the adding behavior but adds no extra transparency about side effects, error conditions, or the requirement for the network to exist. It is adequate given 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 a single, front-loaded sentence: 'Add a route to an existing network.' No wasted words; it gets straight to the action.

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?

Given no output schema, the description does not hint at return values or side effects. It also does not mention that the network must exist or what happens if the route conflicts. It is minimally complete for a simple add operation but could be improved.

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 parameter descriptions like 'Destination network of the route' and 'Gateway for the route'. The tool description does not add additional meaning beyond these, and the schema descriptions themselves are somewhat vague (e.g., lacking format constraints). Baseline score 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 clearly states the verb 'Add' and the resource 'route', and specifies the context 'to an existing network'. It distinguishes from sibling tools like 'delete_route' or 'add_subnet', but could be more explicit that the network is identified by the 'id' parameter.

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 is provided on when to use this tool versus alternatives, such as checking network existence or comparing with 'add_subnet' or 'delete_route'. The description does not mention prerequisites or typical use cases.

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

hetzner_add_server_to_placement_groupAdd Server to Placement GroupA

Add a server to a placement group. The server must be powered off before it can be added.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID
placement_groupYesID of the placement group to add the server to

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false (mutation) and destructiveHint=false. The description adds a key behavioral constraint (server must be powered off), which is valuable beyond annotations. It does not detail error handling or reversibility, but the precondition is significant.

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, no redundant information. It is front-loaded with the purpose immediately, making it efficient and easy to parse.

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 simple action (add server to placement group) with two required parameters and no output schema, the description covers the purpose and a critical precondition. It lacks a mention of the return value or side effects, but for a straightforward mutation, it is reasonably 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?

The input schema already provides clear descriptions for both parameters (Server ID, Placement group ID) with 100% coverage. The description does not add further parameter-level semantics beyond the schema, so it meets the baseline of 3.

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 clearly states the action: 'Add a server to a placement group.' It uses a specific verb and resource, and the sibling list includes distinct tools like 'remove_server_from_placement_group' and 'create_placement_group', so the purpose is well-defined.

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 explicitly states a prerequisite: 'The server must be powered off before it can be added.' This provides important usage context. However, it does not mention when to use this tool versus alternatives (e.g., 'remove' or 'create' tools), which would be helpful.

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

hetzner_add_subnetAdd Subnet to NetworkC

Add a subnet to an existing network.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
typeYesType of subnet
ip_rangeNoIP range of the subnet
vswitch_idNoID of the vSwitch (required for vswitch type)
network_zoneYesName of the network zone, e.g. "eu-central"

TDQS

C2.9/5.0
Behavior2/5

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

The description provides no behavioral details beyond the action. Annotations indicate non-readonly and non-destructive, but the description does not mention side effects, permissions, or state changes. For a creation tool, more context is expected.

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?

Extremely concise one-sentence description with no unnecessary words. It is appropriately sized for a simple 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 description adequately states the purpose, but given no output schema, it would be helpful to mention what the tool returns. It also assumes the agent knows 'existing network' context. Adequate but not 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 parameters are well-documented there. The tool description adds no additional meaning over the schema, but the schema already suffices, giving baseline 3.

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 the action (Add) and resource (subnet). However, it does not differentiate from sibling 'add' tools for other resources beyond the resource name.

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 other network operations, such as 'delete_subnet' or 'attach_server_to_network'. No prerequisites or context provided.

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

hetzner_add_zone_rrset_recordsAdd Records to DNS Zone RRSetA

Add new records to an existing RRSet without removing existing ones. Optionally update the RRSet TTL.

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoOptional new TTL applied alongside the addition
nameYesRRSet name
typeYesDNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)
recordsYesRecords to add to the RRSet
id_or_nameYesZone ID or name

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate this is a non-readonly, non-idempotent, non-destructive mutation. The description adds useful behavioral detail beyond those annotations: it confirms existing records are preserved and that TTL updates are optional. This is meaningful but not exhaustive, so a 4 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?

The description is two tight sentences with no filler. The core additive behavior is stated first, and the optional TTL behavior follows succinctly. Every phrase contributes to understanding the operation.

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 no output schema and a fully covered input schema, the description gives the essential behavioral context: append-only semantics and optional TTL adjustment. It stops short of discussing edge cases or failure modes, but the operation is simple enough that this is not a critical 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 the baseline is 3. The description adds little parameter-level meaning beyond what the schema already provides, though it does reinforce that 'records' are additions and that 'ttl' is an optional update. No substantial extra semantic value is contributed.

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 uses a specific verb ('Add'), names the resource ('existing RRSet'), and explicitly states the non-destructive scope ('without removing existing ones'). This clearly distinguishes it from related record-set tools like hetzner_set_zone_rrset_records or hetzner_update_zone_rrset_records.

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 provides clear context: use this when adding records to an existing RRSet while preserving current records, and optionally updating the TTL. It does not explicitly name alternatives or state when not to use it, but the additive wording gives enough practical guidance.

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

hetzner_apply_firewallApply Firewall to ResourcesA

Apply a firewall to one or more servers or label selectors.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
apply_toYesResources to apply the firewall to

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already indicate mutability (readOnlyHint=false) and non-destructiveness (destructiveHint=false). The description adds no additional context about behavioral traits such as idempotency, side effects, or permissions. It merely states the action without delving into what happens during application.

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, concise sentence that immediately conveys the tool's purpose. It is front-loaded with the essential action and resource, and contains no extraneous 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 action with two well-documented parameters, the description is adequate but lacks completeness. It does not explain what happens if a resource already has the firewall applied, or the behavior of label selectors. Given the absence of an output schema, more context would be helpful for an AI agent to anticipate results.

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 both parameters already described ('id' and 'apply_to'). The description adds no new semantics beyond what's in the schema, such as value formats or constraints (e.g., label selector syntax). It provides a high-level overview but no extra detail.

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 clearly states the action ('Apply'), the resource ('firewall'), and the scope ('to one or more servers or label selectors'). It effectively distinguishes from siblings like 'hetzner_create_firewall' and 'hetzner_remove_firewall'.

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 usage when you have an existing firewall to assign, but it does not explicitly state when to use this tool vs alternatives, nor does it mention prerequisites or exclusions. For example, it doesn't clarify that the firewall must already exist or how it differs from 'hetzner_set_firewall_rules'.

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

hetzner_assign_floating_ipAssign Floating IPA

Assign a floating IP to a server in the same location.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesFloating IP ID
serverYesServer ID to assign the floating IP to

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate it is not read-only, not destructive, not idempotent, and open-world. The description adds no additional behavioral context such as reversibility, side effects, or state requirements, so it does not exceed 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.

Conciseness3/5

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

The description is extremely concise (one short sentence). While it conveys the core purpose, it lacks useful structure such as a second sentence on prerequisites or outcome. It could be more informative without being verbose.

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?

Given the simple tool (2 required params, no output schema), the description is barely adequate. It misses details like return value, success/failure states, or elaboration on the location constraint. The location note is valuable but 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?

Schema description coverage is 100%, so the schema already documents both parameters. The description adds no extra meaning beyond the parameter names; baseline 3 is 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?

The description clearly states the action ('Assign'), the resource ('floating IP'), and the target ('server') with the important constraint ('in the same location'). This distinguishes it from siblings like 'hetzner_unassign_floating_ip' and other floating IP operations.

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 usage context with the location constraint but does not explicitly guide the agent on when to use this tool versus alternatives (e.g., 'hetzner_change_floating_ip_protection'). No prerequisites or conditions are mentioned.

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

hetzner_assign_primary_ipAssign Primary IPB

Assign a primary IP to a server.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPrimary IP ID
assignee_idYesServer ID to assign the primary IP to
assignee_typeYesAssignee type (must be "server")

TDQS

B3.1/5.0
Behavior2/5

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

The description only says 'Assign a primary IP to a server.' While annotations exist (readOnlyHint=false, etc.), the description adds no behavioral details about side effects, such as replacing an existing primary IP or impact on networking. OpenWorldHint is true but unexplained.

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?

The description is extremely concise (one sentence) and front-loaded with the core purpose. It could benefit from slight expansion, but it is not verbose or wasteful.

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?

Given the simplicity of the tool (3 required params, no output schema), the minimal description might be sufficient but lacks any context about constraints, typical use cases, or behavior when the IP is already assigned. It feels incomplete for an AI 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 coverage is 100%, and each parameter already has a clear description. The tool description adds no extra meaning beyond the schema, so baseline score of 3 is 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?

The description clearly states the action ('Assign') and resource ('primary IP' to a server). It distinguishes from sibling tools like 'hetzner_assign_floating_ip' (different resource) and 'hetzner_unassign_primary_ip' (opposite action).

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, prerequisites, or when not to use it. It does not mention alternatives or provide context for decision-making.

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

hetzner_attach_isoAttach ISO to ServerA

Attach an ISO image to a server. The server must be rebooted to boot from the ISO.

ParametersJSON Schema
NameRequiredDescriptionDefault
isoYesISO name or ID to attach
server_idYesServer ID to attach the ISO to

TDQS

A4.2/5.0
Behavior4/5

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

The description adds meaningful behavioral context beyond the annotations by stating the reboot requirement, which is not implied by the annotations (readOnlyHint=false, destructiveHint=false). This helps the agent understand the post-action 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?

The description is extremely concise: two sentences with no wasted words. The first sentence states the action, and the second adds a critical condition. It is front-loaded and efficient.

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 tool's simplicity, the description covers the essential action and the key behavioral requirement (reboot). No output schema exists, but the return value is straightforward. It is complete enough for an agent to understand the tool's behavior.

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?

The input schema provides descriptions for both parameters (server_id, iso) and coverage is 100%. The description does not add additional parameter-specific details beyond the schema, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The title and description clearly state 'Attach an ISO image to a server,' with a specific verb and resource. The sibling tool hetzner_detach_iso provides a clear counterpart, making the purpose distinct and 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?

The description provides a clear usage context: attaching an ISO and the critical requirement that the server must be rebooted to boot from it. It does not explicitly mention when not to use or list alternatives, but the sibling list shows related tools like hetzner_get_iso and hetzner_list_isos for reference.

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

hetzner_attach_lb_to_networkAttach Load Balancer to NetworkB

Attach a load balancer to a network.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
ipNoIP address to assign in the network
networkYesNetwork ID to attach to
ip_rangeNoSubnet IP range (CIDR) to attach to, e.g. "10.0.1.0/24"

TDQS

B3.2/5.0
Behavior2/5

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

The description merely restates the action without disclosing behavioral traits such as idempotency, whether it overwrites existing network attachments, or any effects on the load balancer's public interface. Annotations indicate it is a write operation but not destructive, yet no additional context is given.

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 sentence with no unnecessary words, front-loading the key action and resources.

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?

The description lacks context about side effects (e.g., whether attaching replaces an existing network attachment, if the load balancer must be in a certain state) and does not reference the output or limitations. For a simple mutation tool with no output schema, more behavioral context is needed.

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 descriptions already fully define all parameters (id, network, ip, ip_range) with clear meanings. The description adds no additional value beyond the schema, so baseline score of 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 clearly states the action (attach) and the resources involved (load balancer to a network). It is specific enough to distinguish from siblings like hetzner_detach_lb_from_network and hetzner_attach_server_to_network.

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 is provided on when to use this tool versus alternatives, prerequisites (e.g., load balancer and network must exist), or whether the load balancer must not already be attached to a network.

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

hetzner_attach_server_to_networkAttach Server to NetworkB

Attach a server to a private network, optionally assigning a specific IP, alias IPs, or IP range.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID
ipNoPrivate IP to assign the server in the network (within the network IP range)
networkYesID of the network to attach the server to
ip_rangeNoSubnet IP range (CIDR) to attach to, e.g. "10.0.1.0/24"
alias_ipsNoAdditional alias IPs to assign the server on the network

TDQS

B3.4/5.0
Behavior3/5

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

Annotations indicate this is a write operation (readOnlyHint=false) but not destructive. The description adds that optional IP assignments are possible, but it does not disclose behavioral traits like whether attaching affects running services, requires the server to be powered off, or if it overwrites existing network config. Annotations already cover safety, so the description adds minimal value.

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-structured sentence that conveys the core action and optional capabilities without extraneous information. It is front-loaded and to the point.

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?

The description lacks important context for a mutation tool with no output schema. It does not explain return values, side effects, prerequisites (e.g., server and network must exist), or whether the operation is reversible. Given the complexity of network attachment and the lack of output schema, the description should provide more guidance.

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 descriptions for all 5 parameters. The description reiterates that ip, alias_ips, and ip_range are optional, aligning with the schema. This adds context but does not significantly enhance understanding beyond what the schema already provides. Baseline 3 is 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?

The description clearly states the action (attach a server to a private network) and optionally mentions assigning IPs, which distinguishes it from sibling tools like detach_server_from_network or attach_volume. The verb+resource+target structure is specific and 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?

No usage guidelines are provided. The description does not mention when to use this tool versus alternatives (e.g., assign_floating_ip for public IPs, or attach_lb_to_network). It also does not specify prerequisites such as server and network existence or whether the server should be powered off.

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

hetzner_attach_volumeAttach VolumeB

Attach a volume to a server. The server and volume must be in the same location.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesVolume ID
serverYesServer ID to attach the volume to
automountNoAuto-mount the volume after attaching

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate mutation (readOnlyHint=false) and non-destructiveness (destructiveHint=false). The description adds the location constraint as a behavioral requirement, but does not disclose whether the volume must be unattached first, impact on server, or automount behavior. Moderate additional value.

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 extremely concise with two sentences that front-load the action and essential constraint. No wasted 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?

The description lacks explanation of automount behavior, expected result, prerequisites (e.g., volume not attached elsewhere), and error scenarios. For a tool with no output schema and multiple parameters, more context is needed.

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 clear parameter descriptions. The tool description adds no new meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Attach a volume to a server') and adds a specific constraint ('server and volume must be in the same location'), making the purpose precise and distinguishable from related tools like hetzner_detach_volume.

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 a prerequisite (same location) but gives no guidance on when to use this tool versus alternatives such as hetzner_create_volume or hetzner_detach_volume. No when-not-to-use or alternative tool references.

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

hetzner_change_alias_ipsChange Server Alias IPsA
DestructiveIdempotent

Replace the alias IPs that a server has on a private network. The list overrides any existing alias IPs for that network.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID
networkYesID of the network the server is attached to
alias_ipsYesFull list of alias IPs to set on the network (replaces existing). Pass [] to clear.

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate the operation is destructive (destructiveHint=true) and idempotent (idempotentHint=true). The description adds context about overriding existing alias IPs, but does not disclose additional behaviors such as prerequisites, permissions, or error scenarios beyond what the annotations and schema 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?

The description is a single sentence of 18 words, front-loading the action and using imperative mood. No extraneous information, and it efficiently conveys the core functionality.

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 tool with three required parameters and no output schema, the description covers the essential operation. However, it does not mention return values or prerequisites (e.g., server must be attached to the network), which would improve completeness.

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 each parameter having a clear description. The tool description does not add new semantic meaning beyond what the schema already conveys, so it meets the baseline of 3.

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 clearly states the action ('Replace'), the resource ('alias IPs that a server has on a private network'), and the effect ('overrides any existing alias IPs for that network'). This distinguishes it from other change tools in the sibling list, which target different resources like protection, DNS, or load balancer settings.

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 implies when to use (when you need to set the alias IPs for a server on a network, replacing existing ones). However, it does not explicitly state when not to use or mention alternatives like adding/removing individual IPs, which are not present in sibling tools but could be relevant.

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

hetzner_change_dns_ptrChange Server Reverse DNSA
Idempotent

Change the reverse DNS entry for one of a server's public IPv4 or IPv6 addresses. Set dns_ptr to null to reset to the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID
ipYesPublic IPv4 or IPv6 address of the server to set the reverse DNS entry for
dns_ptrYesReverse DNS PTR record value, or null to reset to the default

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnly=false, idempotent=true, openWorld=true and destructive=false, so the safety profile is covered. The description adds the meaningful semantic that dns_ptr=null resets to the default, but omits any auth requirements, propagation delay, or error behavior for an invalid IP address.

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 operation and its scope first, then the reset behavior. Nothing is wasted and the key constraint 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 idempotent mutation with full schema coverage and complete annotations, the description covers the operation, scope, and reset path adequately. Only the lack of sibling routing keeps it from being fully self-sufficient.

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?

All three parameters have 100% schema description coverage, so the schema already carries the semantics and the baseline is 3. The description's null-to-reset note duplicates what the dns_ptr schema field already states, adding no new parameter information.

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 (change) and resource (reverse DNS PTR entry) scoped to a server's public IPv4/IPv6 addresses, which differentiates it from the similarly-named lb/floating-IP/primary-IP rdns siblings. It does not name those alternatives explicitly, so it stops 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 description gives the null-reset behavior, which is useful operational guidance, but never states when to use this tool versus the parallel rdns tools (change_lb_dns_ptr, change_floating_ip_rdns, change_primary_ip_rdns). Usage is implied by the resource scope rather than stated.

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

hetzner_change_floating_ip_protectionChange Floating IP ProtectionA
Idempotent

Enable or disable delete protection on a floating IP to guard against accidental destruction.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesFloating IP ID
deleteNoIf true, prevents the floating IP from being deleted

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate idempotentHint=true, readOnlyHint=false, destructiveHint=false. The description adds context that the tool enables or disables delete protection, which explains the idempotent nature (toggling) and confirms non-destructive behavior. This goes beyond annotations by specifying the protection type.

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, concise sentence (17 words) that is front-loaded with the action and resource. Every word contributes meaning without 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 simple boolean toggle with no output schema, the description adequately covers the operation. It does not explain return values, but this is not expected given the tool's simplicity and the absence of an output 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?

The input schema has 100% coverage with descriptions for both parameters ('id' and 'delete'). The description does not add any new information about the parameters beyond what the schema already provides, hitting 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?

The description clearly states the verb 'enable or disable', the resource 'delete protection on a floating IP', and the purpose 'to guard against accidental destruction'. It distinguishes itself from sibling tools like hetzner_change_floating_ip_rdns and hetzner_update_floating_ip by specifying the exact aspect being changed.

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 provides clear context for when to use this tool: to toggle delete protection. While it does not explicitly state when not to use it or mention alternatives, the purpose is unambiguous and sufficient for decision-making given the sibling context.

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

hetzner_change_floating_ip_rdnsChange Floating IP Reverse DNSB
Idempotent

Change the reverse DNS entry for a floating IP. Set dns_ptr to null to reset.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesFloating IP ID
ipYesIP address to set the reverse DNS entry for
dns_ptrYesReverse DNS PTR record value, or null to reset

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, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds the reset semantic for null, which is genuinely useful context, but says nothing about propagation delay, auth requirements, or what happens to the previous PTR record.

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 followed by the one non-obvious behavioral note. 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 simple three-parameter mutation with full schema coverage and annotations, the definition covers the essentials plus the reset edge case. It is complete enough to call correctly, though the lack of sibling disambiguation is 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 description coverage is 100%, so all three parameters are documented in the schema, including the null-to-reset behavior for dns_ptr. The description adds no syntax or format detail beyond what the schema already provides; 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 gives a specific verb+resource: changing the reverse DNS (PTR) entry for a floating IP. It is clearly distinct from unrelated siblings, but it does not explicitly differentiate itself from close siblings like hetzner_change_dns_ptr, hetzner_change_lb_dns_ptr, or hetzner_change_primary_ip_rdns.

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 the reset behavior (set dns_ptr to null) but offers no when-to-use guidance, prerequisites, or routing between this and the several similarly named rDNS tools. The agent must infer scope 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.

hetzner_change_image_protectionChange Image ProtectionA
Idempotent

Enable or disable delete protection on a snapshot or backup image to guard against accidental destruction.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesImage ID
deleteNoIf true, prevents the image from being deleted

TDQS

A4/5.0
Behavior4/5

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

Annotations indicate idempotency and non-destructiveness. The description adds context about delete protection specifically and guarding against accidental destruction. It is consistent with annotations and provides useful behavioral context beyond the structured data.

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

Conciseness5/5

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

The description is a single, efficient sentence of 17 words, front-loaded with key information, and contains no unnecessary details.

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 tool with two parameters and no output schema, the description is sufficient. It specifies the target (snapshot/backup image) and the action. Minor omission: could mention that protection only prevents deletion, not modifications, but overall adequately 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%, so baseline 3 applies. The description does not add additional meaning beyond the schema; the boolean parameter 'delete' mapping is clear from the description but does not enhance schema semantics.

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 clearly states the tool enables or disables delete protection on snapshot/backup images, specifying the verb, resource, and purpose. It effectively distinguishes from sibling tools like hetzner_delete_image or hetzner_get_image.

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 usage (to protect images from deletion) but does not explicitly state when to use versus alternatives, nor does it mention prerequisites or when not to use.

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

hetzner_change_ip_rangeChange Network IP RangeA
Idempotent

Expand the IP range of an existing network. The new CIDR range must contain the current range; shrinking is not supported.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNetwork ID
ip_rangeYesNew IP range in CIDR notation (e.g. "10.0.0.0/8"). Must be a superset of the current range.

TDQS

A4.2/5.0
Behavior4/5

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

Adds behavioral context beyond annotations: confirms expansion-only operation and superset requirement. No contradictions with annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true).

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

Conciseness5/5

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

Two sentences, no fluff, front-loaded with the primary action. Every sentence adds necessary 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 simple mutation tool with 2 parameters and no output schema, the description covers purpose, constraint, and behavior. Missing nothing critical.

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 descriptions for both parameters. The description adds minimal extra meaning beyond what the schema already provides (e.g., 'superset' constraint is already in schema). Baseline 3 is 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?

The description uses a specific verb ('Expand') and resource ('IP range of an existing network'), clearly distinguishing it from sibling tools like create_network or update_network.

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 states the constraint that the new CIDR must contain the current range and that shrinking is not supported, providing clear usage context. However, it does not compare to alternatives or mention when not to use.

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

hetzner_change_lb_algorithmChange Load Balancer AlgorithmA
Idempotent

Change the balancing algorithm of a load balancer.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
typeYesAlgorithm type

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate the tool is idempotent, non-destructive, and not read-only. The description adds no additional behavioral context beyond the annotation hints, such as whether changing the algorithm affects existing connections or requires a specific load balancer state.

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 concise sentence with no redundant information. It is front-loaded 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?

Given the tool's simplicity and the presence of good annotations and schema coverage, the minimal description is adequate but lacks context about effects (e.g., impact on traffic) or prerequisites (e.g., load balancer status).

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?

The input schema has 100% description coverage, with both parameters ('id' and 'type') well-documented. The description does not add any extra meaning beyond the schema; it simply restates the purpose.

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 clearly states the action ('Change') and the resource ('balancing algorithm of a load balancer'). It distinguishes from sibling tools like 'hetzner_change_lb_type' which modifies a different property (load balancer type).

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 is provided on when to use this tool versus alternatives (e.g., 'hetzner_update_load_balancer' or 'hetzner_change_lb_type'). The description does not mention any prerequisites or conditions for using this tool.

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

hetzner_change_lb_dns_ptrChange Load Balancer Reverse DNSB
Idempotent

Change the reverse DNS entry for one of a load balancer's public IP addresses. Set dns_ptr to null to reset to the default.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesLoad Balancer ID
ipYesPublic IPv4 or IPv6 address of the load balancer to set the reverse DNS entry for
dns_ptrYesReverse DNS PTR record value, or null to reset to the default

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnly=false, idempotent=true, and destructive=false, lowering the burden. The description adds the genuinely useful semantic that dns_ptr=null resets to the default, but does not state the effect on the action/response or any auth prerequisites.

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 operation and followed by the key null-reset detail. 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?

A simple three-parameter mutation with fully documented schema and no output schema; the description covers what the agent needs to call it correctly. Only minor gaps around response/action behavior 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 coverage is 100% and the dns_ptr description in the schema already explains the null-reset behavior, so the description largely repeats structured data. 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.

Purpose4/5

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

States a specific verb (change) and resource (reverse DNS entry) scoped to a load balancer's public IP addresses, which distinguishes it from server/floating-IP rdns siblings. It is clear but does not explicitly name 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?

The description gives no when-to-use context or contrast with the analogous hetzner_change_dns_ptr, hetzner_change_floating_ip_rdns, or hetzner_change_primary_ip_rdns tools. Usage must be inferred entirely from the name and resource mention.

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

hetzner_change_lb_typeChange Load Balancer TypeB
Idempotent

Change the type (plan) of a load balancer.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
load_balancer_typeYesNew load balancer type name or ID

TDQS

B3.1/5.0
Behavior2/5

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

Annotations indicate idempotentHint=true, but the description adds no behavioral context—e.g., potential downtime, billing changes, or validation rules. For a mutation tool, this is insufficient.

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?

The description is a single sentence that directly conveys the purpose without redundancy. It is front-loaded and efficient, though it sacrifices detail.

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 only two params, the description should cover typical usage context—like verifying type availability or handling errors—but fails to do so. The tool may be usable but the description leaves 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% and already explains both parameters ('Resource ID' and 'New load balancer type name or ID'). The description adds no additional meaning beyond the schema, meriting the baseline score.

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 uses a specific verb 'change' and clearly identifies the resource as 'type (plan) of a load balancer.' It is distinct from sibling tools like change_lb_algorithm or change_load_balancer_protection, which target different aspects.

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 is provided on when to use this tool versus alternatives, such as when to upgrade vs. downgrade, or prerequisites like checking available types via hetzner_list_lb_types. The description lacks context about use cases.

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

hetzner_change_load_balancer_protectionChange Load Balancer ProtectionA
Idempotent

Enable or disable delete protection on a load balancer to guard against accidental destruction.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesLoad Balancer ID
deleteNoIf true, prevents the load balancer from being deleted

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate idempotent and non-destructive behavior. The description adds minimal context ('guard against accidental destruction') beyond what the schema and annotations provide. It does not detail side effects or permission requirements.

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 clear sentence with no extraneous words. It is front-loaded and efficient.

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 toggle tool, the description, combined with the schema and annotations, provides sufficient information for an agent to understand and invoke the tool correctly. It covers the essential purpose and behavior.

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 both parameters described. The description does not add new meaning to the parameters beyond the schema. It could have elaborated on the default behavior when 'delete' is not provided.

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 clearly states it enables or disables delete protection on a load balancer, specifying both the action and the resource. It distinguishes from sibling protection tools for other resources like floating IP, server, etc.

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 usage for protecting a load balancer from deletion but does not explicitly state when to use this tool versus other protection tools or provide any prerequisites. There is no guidance on when not to use it.

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

hetzner_change_network_protectionChange Network ProtectionA
Idempotent

Enable or disable delete protection on a network to guard against accidental destruction.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNetwork ID
deleteNoIf true, prevents the network from being deleted

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare write (readOnlyHint=false), non-destructive (destructiveHint=false), and idempotent (idempotentHint=true) behavior. Description adds that it guards against accidental destruction, which aligns with annotations. No additional behavioral details like side effects or required 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?

Single sentence of 14 words, directly conveying purpose and effect. No filler, front-loaded with action and resource.

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 it's a simple toggle with no output schema and good annotations, the description is mostly complete. It could mention that the network must already exist, but this is implied by the resource type.

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 clear descriptions for both parameters (id: Network ID, delete: If true prevents deletion). Description does not add any new meaning beyond the schema; it simply summarizes the boolean parameter.

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?

Description clearly states the tool enables or disables delete protection on a network, using specific verb (enable/disable) and resource (network protection). It distinguishes from sibling tools by focusing on network protection, matching the naming pattern of other protection tools like hetzner_change_server_protection.

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 like other protection tools or manual deletion prevention. No mention of prerequisites (e.g., network must exist) or context where toggling protection is appropriate.

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

hetzner_change_primary_ip_protectionChange Primary IP ProtectionA
Idempotent

Enable or disable delete protection on a primary IP to guard against accidental destruction.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPrimary IP ID
deleteNoIf true, prevents the primary IP from being deleted

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already provide key behavioral hints (idempotent, not destructive, not readonly). The description adds minimal extra context ('guard against accidental destruction') but doesn't elaborate on side effects or idempotency implications.

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 concise sentence that efficiently conveys the tool's purpose without any unnecessary words.

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 tool with two well-described parameters and robust annotations, the description provides sufficient context. It covers the essential purpose and benefit, though it could optionally mention the effect of setting delete to false.

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 described in the input schema with clear descriptions. The tool description adds no additional parameter meaning beyond that.

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 clearly states the tool's function: enable or disable delete protection on a primary IP. It uses specific verbs and resource type, and the name distinguishes it from many similar protection tools for other Hetzner resources.

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 wanting to guard against accidental deletion but lacks explicit guidance on when not to use it or alternatives. Given the sibling list, the purpose is clear, but no comparative context is provided.

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

hetzner_change_primary_ip_rdnsChange Primary IP Reverse DNSB
Idempotent

Change the reverse DNS entry for a primary IP. Set dns_ptr to null to reset.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPrimary IP ID
ipYesIP address to set the reverse DNS entry for
dns_ptrYesReverse DNS PTR record value, or null to reset

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, idempotentHint=true, destructiveHint=false and openWorldHint=true, covering the safety/idempotency profile. The description adds one genuinely useful behavioral detail — passing null clears the PTR record — but says nothing about permissions, propagation/delay, or what happens to the pre-existing record beyond the reset hint.

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, and the core action is front-loaded before the reset caveat. Appropriate size for a simple mutation tool.

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 existing annotations, a fully documented 3-parameter schema, and no output schema, the description is adequate to invoke the tool correctly. It falls short only on sibling disambiguation (three other change-*_dns/rdns tools exist) and on failure/permission 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%; the schema already documents id, ip, and dns_ptr, including 'or null to reset'. The description's null-reset sentence is therefore a restatement rather than added 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 (change) and resource (reverse DNS entry for a primary IP), which is clear on its own. However, the sibling list contains near-identical tools (hetzner_change_dns_ptr, hetzner_change_floating_ip_rdns, hetzner_change_lb_dns_ptr), and the description never explicitly contrasts itself against them beyond the 'primary IP' scope 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?

No when-to-use guidance, no prerequisites (e.g. IP must be assigned), and no routing away from the sibling rdns/dns_ptr tools. The only actionable hint is the reset condition, which is a how-to rather than a usage guideline.

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

hetzner_change_server_protectionChange Server ProtectionA
Idempotent

Enable or disable delete and rebuild protection on a server to guard against accidental destruction.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID
deleteNoIf true, prevents the server from being deleted
rebuildNoIf true, prevents the server from being rebuilt

TDQS

A3.5/5.0
Behavior2/5

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

The description adds little behavioral context beyond the annotations. Annotations already indicate idempotent and non-destructive behavior, but the description does not disclose any additional traits like prerequisites or side effects.

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

Conciseness4/5

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

The description is a single efficient sentence with no wasted words, front-loading the key purpose. It is appropriately concise.

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 simplicity of the tool and full schema coverage, the description is largely complete. It states the purpose clearly, though it could mention that the server must exist.

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 briefly summarizes the boolean parameters (delete and rebuild) but does not add 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 clearly states the tool enables or disables delete and rebuild protection on a server, using a specific verb and resource. It distinguishes from sibling protection tools by specifically mentioning 'server'.

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 usage for protecting servers, but does not provide explicit guidance on when to use this tool versus alternatives (e.g., other change_X_protection tools). No when-not-to-use or exclusion criteria are given.

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

hetzner_change_storage_box_protectionChange Storage Box ProtectionA
Idempotent

Enable or disable delete protection on a Storage Box to guard against accidental destruction.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
deleteNoIf true, prevents the Storage Box from being deleted

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate non-destructive, idempotent behavior. The description adds rationale ('guard against accidental destruction') but lacks details on idempotency effects or prerequisites.

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?

Single concise sentence that immediately conveys the tool's action. No extraneous 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?

Adequately describes the tool for its simplicity, though it could mention that the 'delete' parameter is optional (not required). Overall sufficient for a protection toggle.

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. The description does not add semantic value beyond what the schema 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 specifies a clear verb ('Enable or disable delete protection') and resource ('Storage Box'), and is distinct from sibling tools like change_floating_ip_protection.

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 toggling delete protection but does not explicitly state when to use or avoid this tool over alternatives.

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

hetzner_change_storage_box_subaccount_home_directoryChange Storage Box Subaccount Home DirectoryA
Idempotent

Change the home directory a Storage Box subaccount is scoped to.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
subaccount_idYesSubaccount ID
home_directoryYesNew home directory for the subaccount, e.g. "/backups/db"

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true, openWorldHint=true, and non-destructive. The description adds no further behavioral context (e.g., whether existing files are moved). It is adequate but not enhanced.

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?

Single sentence, directly states the action and resource. No redundant words, well-structured.

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 change operation with full schema coverage, the description covers the basics. However, it lacks context about validation, immediacy of the change, or side effects, which would improve completeness.

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 clear descriptions for all three parameters, including an example for home_directory. Description adds no extra meaning 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?

Description clearly states the verb 'change' and the resource 'home directory a Storage Box subaccount is scoped to', exactly matching the tool name and distinguishing it from sibling tools like hetzner_update_storage_box_subaccount.

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 guidance on when to use this tool versus alternatives (e.g., hetzner_update_storage_box_subaccount). The usage is implied but lacks exclusions or prerequisites.

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

hetzner_change_storage_box_typeChange Storage Box TypeB

Change the type (capacity tier) of a Storage Box. The new type must have at least the current usage capacity.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
storage_box_typeYesID or name of the target Storage Box type, e.g. "bx30"

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already indicate a mutation (readOnlyHint false) and non-destructive (destructiveHint false). The description adds the capacity constraint but does not disclose error handling, 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.

Conciseness5/5

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

Two sentences, no fluff, front-loaded with the core action. Every part earns its place.

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 simple mutation with 2 params and no output schema. However, it lacks details on return values, potential errors, and whether the operation is reversible. The capacity constraint is helpful but could be expanded.

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 parameters. The description adds the capacity constraint for storage_box_type, but does not explain how to find available types or how the condition is validated.

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 changes the type/capacity tier of a Storage Box, with a constraint on capacity. It distinguishes from get/list tools but not from hetzner_update_storage_box, which might also modify type.

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 like hetzner_update_storage_box or when not to use it. No prerequisites mentioned, such as checking current usage capacity.

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

hetzner_change_volume_protectionChange Volume ProtectionA
Idempotent

Enable or disable delete protection on a volume to guard against accidental destruction.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesVolume ID
deleteNoIf true, prevents the volume from being deleted

TDQS

A4/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false and destructiveHint=false, and idempotentHint=true. The description adds that the tool enables/disables delete protection, which is clear. No contradictions. It adequately discloses the mutation behavior beyond annotations.

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

Conciseness5/5

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

A single sentence of 15 words, front-loaded with action and resource. Every word is necessary; 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 simple toggle tool with two parameters and no output schema, the description is sufficient. It explains the purpose and the effect. Minor gap: it doesn't state the volume ID is required, but that's in 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 coverage is 100%, so baseline 3. The description ('delete protection') adds context to the 'delete' boolean parameter, but does not add technical details beyond what the schema 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 clearly states the action (enable/disable delete protection) and resource (volume), with purpose to guard against accidental destruction. The title matches. Among sibling tools with similar 'change_*_protection' patterns, it is distinct for volumes.

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 use case (protection against accidental deletion) but does not contrast with other protection tools or provide when-not-to-use guidance. The context is implied via sibling tools, but explicit guidelines are missing.

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

hetzner_change_zone_primary_nameserversChange DNS Zone Primary NameserversA
Idempotent

Replace the list of primary nameservers used by a secondary DNS zone for AXFR/IXFR transfers.

ParametersJSON Schema
NameRequiredDescriptionDefault
id_or_nameYesZone ID or name
primary_nameserversYesNew full list of primary nameservers

TDQS

A3.6/5.0
Behavior3/5

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

Annotations indicate mutation (readOnlyHint=false) and idempotency, which the description supports by stating 'Replace'. It adds context about secondary zones and AXFR/IXFR, but does not disclose potential side effects or required permissions 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?

Single sentence, 18 words, no redundancy. Essential information is front-loaded and efficient.

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, the description adequately explains purpose and scope (secondary zone, AXFR/IXFR). It does not detail return values (no output schema) or error conditions, but is largely complete given tool complexity.

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?

Input schema covers 100% of parameters with descriptions. The description adds no additional meaning beyond schema, so baseline score of 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 uses the specific verb 'Replace' and clearly identifies the resource ('primary nameservers') and context ('secondary DNS zone for AXFR/IXFR transfers'), distinguishing it from sibling tools like 'hetzner_update_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?

No explicit guidance on when to use this tool versus alternatives, such as 'hetzner_update_zone' or 'hetzner_import_zonefile'. No prerequisites or limitations mentioned.

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

hetzner_change_zone_protectionChange DNS Zone ProtectionA
Idempotent

Enable or disable delete protection on a DNS zone to guard against accidental destruction.

ParametersJSON Schema
NameRequiredDescriptionDefault
deleteNoIf true, prevents the zone from being deleted
id_or_nameYesZone ID or name

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate idempotent and non-destructive behavior. The description adds context about guarding against accidental destruction, which aligns with the idempotentHint. No contradictions.

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. Every word earns its place, making it highly efficient.

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 simple two-parameter tool with full schema coverage and no output schema, the description provides sufficient context. It covers the purpose and effect, but could mention that the tool is idempotent or that protection can be toggled multiple times.

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 baseline is 3. The description does not elaborate on parameters beyond the schema, which already provides adequate descriptions for 'id_or_name' and 'delete'.

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 clearly states the action (enable/disable delete protection) and the resource (DNS zone), distinguishing it from sibling protection tools like hetzner_change_floating_ip_protection or hetzner_change_server_protection.

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 usage for managing zone protection but lacks explicit guidance on when to use versus alternatives (e.g., hetzner_change_zone_rrset_protection) or prerequisites. The context is clear but no exclusions are mentioned.

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

hetzner_change_zone_rrset_protectionChange DNS Zone RRSet ProtectionA
Idempotent

Enable or disable change protection on an RRSet to guard against accidental modification or deletion.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRRSet name
typeYesDNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)
changeNoIf true, prevents the RRSet from being modified or deleted
id_or_nameYesZone ID or name

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate this is mutating, non-destructive, and idempotent. The description adds the consequence that protection guards against accidental modification or deletion, which is useful but mostly reinforces what the tool's name and the `change` parameter already imply. No contradiction with annotations.

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

Conciseness5/5

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

A single sentence that states the action, the resource, and the purpose with no wasted words. The key information is front-loaded and immediately actionable.

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 toggle operation with comprehensive parameter schemas and annotations covering the safety profile, the description is functionally complete. An agent can select the tool and invoke it correctly from the provided information. Minor missing piece is explicit guidance about how this differs from zone-level protection mutations.

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 four parameters, including the boolean `change` behavior and the id_or_name, name, and type fields. The description does not add 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?

The description clearly identifies the action ('Enable or disable change protection') and the resource ('on an RRSet'), making it obvious what the tool does. It does not explicitly distinguish itself from sibling protection tools such as hetzner_change_zone_protection, 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?

The phrase 'to guard against accidental modification or deletion' provides clear context for when this tool should be used. It does not explicitly mention alternatives or when not to use it, but the intended use case is clear for a resource-specific protection toggle.

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

hetzner_change_zone_rrset_ttlChange DNS Zone RRSet TTLB
Idempotent

Change the TTL of an RRSet. Pass ttl=null to fall back to the zone default TTL.

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlYesNew TTL in seconds, or null to fall back to the zone default
nameYesRRSet name
typeYesDNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)
id_or_nameYesZone ID or name

TDQS

B3.4/5.0
Behavior2/5

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

Annotations already convey that this is a mutating, non-destructive, idempotent operation, so the description does not need to restate that. However, it adds no behavioral context beyond the null-fallback behavior, which is already in the schema description. There is no mention of propagation, permissions, or side effects on existing 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?

The description is two sentences with no wasted words. It leads with the core action and then adds the key exception/nuance. This is an appropriately sized and well-structured description.

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-attribute mutation with complete schema coverage and helpful annotations, the description is sufficient. It captures the core behavior and the null special-case. It could be slightly richer about relationship to zone-level TTL or expected effects, 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?

Schema description coverage is 100%, so every parameter is already documented. The description's 'ttl=null to fall back to the zone default TTL' repeats what the schema already says. The description adds no semantic value beyond the structured 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: 'Change the TTL of an RRSet.' It also adds the meaningful null-fallback behavior, clarifying the scope of the operation. It does not explicitly contrast with the sibling change_zone_ttl, but the RRSet-specific focus makes the purpose clear.

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 this tool is for per-RRSet TTL changes, and the phrase 'zone default TTL' hints at a zone-level alternative. However, it does not explicitly say when to use this tool versus change_zone_ttl or other RRSet tools. The usage guidance is only implied, not stated.

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

hetzner_change_zone_ttlChange DNS Zone Default TTLA
Idempotent

Change the default TTL applied to records in a DNS zone that do not have an explicit TTL.

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlYesNew default TTL in seconds
id_or_nameYesZone ID or name

TDQS

A3.8/5.0
Behavior4/5

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

The description adds value beyond annotations by specifying that the change only affects records that do not have an explicit TTL. This behavioral detail is not captured by the annotations, which already indicate idempotent and non-destructive traits. No contradictions found.

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-structured sentence that clearly conveys the tool's purpose. It is front-loaded and contains no unnecessary words.

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 mutation tool with two parameters and no output schema, the description adequately covers the purpose and key behavioral detail (only affects records without explicit TTL). It does not mention prerequisites or side effects, but these are largely inferable from 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 coverage is 100%, so baseline is 3. The description does not add any additional meaning beyond the schema, which already describes both parameters adequately.

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 clearly states the verb 'Change' and the resource 'default TTL applied to records in a DNS zone'. It distinguishes from sibling tools like hetzner_change_zone_rrset_ttl by specifying 'default TTL' for the entire zone versus a specific record 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?

The description provides no guidance on when to use this tool versus alternatives like hetzner_change_zone_rrset_ttl or other zone configuration tools. There is no mention of prerequisites or conditions.

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

hetzner_create_certificateCreate CertificateA

Create an uploaded certificate (provide PEM data) or a managed certificate (provide domain names).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the certificate
typeNoCertificate type (default: uploaded)
labelsNoLabels as key-value pairs
certificateNoPEM-encoded certificate (required for uploaded type)
private_keyNoPEM-encoded private key (required for uploaded type)
domain_namesNoDomain names (required for managed type)

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false and openWorldHint=true. The description adds context about the two modes but does not disclose behavioral traits like idempotency, rate limits, or potential duplicates. It does not contradict 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 a single sentence of 15 words, starting with the action verb. It is extremely concise and front-loaded, wasting no words.

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 complexity (6 parameters, no output schema, open-world hint) and rich schema coverage, the description adds value by clarifying the two creation modes and conditional requirements. It does not mention related operations (e.g., update, retry) but is fairly complete for its purpose.

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?

The schema has 100% parameter description coverage, so the baseline is 3. The description mentions 'PEM data' and 'domain names' but these are already detailed in the schema parameters. No additional parameter-level meaning is provided.

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 clearly states that the tool creates a certificate, specifying two distinct types: uploaded (PEM data) and managed (domain names). It uses a specific verb and resource, and distinguishes between sibling tools like hetzner_get_certificate and hetzner_delete_certificate.

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 when to use the tool (to create a certificate of either type) but does not provide exclusions or alternatives. It could mention that for retrieving existing certificates, use get_certificate, or for deleting, use delete_certificate, but it does not.

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

hetzner_create_firewallCreate FirewallB

Create a new firewall with optional rules and resource assignments.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the firewall
rulesNoArray of firewall rules
labelsNoLabels as key-value pairs
apply_toNoResources to apply the firewall to

TDQS

B3.1/5.0
Behavior2/5

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

Annotations indicate a write operation (readOnlyHint=false) and nondestructive (destructiveHint=false). The description adds no extra behavioral details beyond the annotations, such as idempotency, side effects, or error conditions. With openWorldHint=true, the agent might expect unknown side effects, but the description doesn't clarify.

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?

The description is a single concise sentence without redundancy. It gets the point across efficiently, but could be slightly more informative without becoming verbose.

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?

Given the complexity (nested objects, 4 parameters, no output schema), the description is insufficient. It does not explain what the response contains, whether creation succeeds immediately, or any constraints like name uniqueness. For a creation tool, more context is expected.

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%, meaning every parameter has a description in the schema. The tool description merely echoes that rules and apply_to are optional, adding no new semantic nuance. Baseline 3 is 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?

Description states 'Create a new firewall with optional rules and resource assignments.' This clearly identifies the verb (create) and resource (firewall), and distinguishes from siblings like hetzner_apply_firewall (which applies existing firewalls) and hetzner_set_firewall_rules (which modifies rules).

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 is provided on when to use this tool versus alternatives such as hetzner_apply_firewall or hetzner_set_firewall_rules. The description lacks any prerequisites, exclusions, or context for choosing this action.

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

hetzner_create_floating_ipCreate Floating IPA

Create a new floating IP. Either home_location or server must be provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName of the floating IP
typeYesIP type
labelsNoLabels as key-value pairs
serverNoServer ID to assign the floating IP to. Required if home_location is not set
descriptionNoDescription of the floating IP
home_locationNoHome location name (e.g. "fsn1"). Required if server is not set

TDQS

A3.6/5.0
Behavior3/5

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

Annotations indicate the tool is not read-only, and the description confirms it creates a floating IP. However, it does not disclose additional behavioral traits like idempotency or side effects; the constraint is already implied by 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?

The description is a single sentence that is direct and contains no unnecessary words. It is front-loaded with the action and key constraint.

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 6 parameters, no output schema, and a simple description, the agent lacks information about return values or post-creation behavior. The description does not compensate for these 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%, and the description does not add significant meaning beyond what is already in the schema. The constraint about home_location/server is mirrored in field descriptions.

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 clearly states 'Create a new floating IP' with a specific verb and resource. It distinguishes from siblings like hetzner_create_primary_ip by specifying the resource 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?

The description mentions the key constraint 'Either home_location or server must be provided' but does not differentiate from alternative tools or provide when-to-use guidance beyond that.

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

hetzner_create_imageCreate ImageB

Create a snapshot image from an existing server.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoImage type (default: snapshot)
labelsNoLabels as key-value pairs
server_idYesServer ID to create the image from
descriptionNoImage description

TDQS

B3.2/5.0
Behavior2/5

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

Annotations indicate write operation (readOnlyHint=false), but no destructive or idempotent hints. The description does not disclose consequences like potential conflicts or limits. With no output schema, the agent lacks insight into return values.

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

Conciseness5/5

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

One sentence of 8 words with zero wasted words. It is front-loaded and efficient, though it could benefit from slight expansion for context.

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?

Despite high schema coverage, the description is too minimal for a creation tool with 4 parameters. It omits information about image types, labels, description, and return values, which an agent needs 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 100%, so baseline is 3. The description does not add any meaning beyond what the schema already provides for 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?

The description clearly states the action (create) and resource (image) and source (existing server). It is specific and distinguishes from sibling tools that create other resources like servers or volumes.

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 hetzner_enable_backup or when to choose between snapshot and backup types. The description lacks context for decision-making.

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

hetzner_create_load_balancerCreate Load BalancerB

Create a new load balancer with the specified type, location, and optional targets and services.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the load balancer
labelsNoLabels as key-value pairs
networkNoNetwork ID to attach to
targetsNoArray of targets
locationNoLocation name (e.g. "fsn1"), mutually exclusive with network_zone
servicesNoArray of services
algorithmNoLoad balancing algorithm
network_zoneNoNetwork zone (e.g. "eu-central"), mutually exclusive with location
public_interfaceNoEnable the public interface
load_balancer_typeYesLoad balancer type name or ID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate this is a write operation (readOnlyHint=false). The description adds no extra behavioral context beyond the obvious creation action. It doesn't disclose potential side effects, permission requirements, or what is returned.

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 sentence with 16 words, front-loading the core purpose. No wasted words; every part contributes to understanding the tool's primary function.

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?

Given the tool's complexity (10 parameters, nested objects, no output schema), the description is too brief. It lacks context on prerequisites, behavior when creating, or return values. The description does not adequately prepare the agent for the full scope of the tool's use.

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 descriptions for all parameters. The description only lists a few parameters generically ('type, location, and optional targets and services') without adding value beyond what the schema already provides. Baseline of 3 is 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?

The description explicitly states 'Create a new load balancer' with 'specified type, location, and optional targets and services,' which is a clear verb+resource. The word 'new' distinguishes it from sibling tools that add to existing load balancers.

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 guidance on when to use this tool versus alternatives like hetzner_add_lb_service or hetzner_add_lb_target. It does not mention prerequisites or typical workflow context.

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

hetzner_create_networkCreate NetworkB

Create a new network with the specified IP range, and optionally subnets and routes.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the network
labelsNoLabels as key-value pairs
routesNoArray of routes to create
subnetsNoArray of subnets to create
ip_rangeYesIP range of the whole network, e.g. "10.0.0.0/8"
expose_routes_to_vswitchNoWhether to expose routes to the vSwitch

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-readonly, non-idempotent, non-destructive write with open-world effects. The description adds only that subnets/routes are optional, without disclosing auth requirements, rate limits, or what the creation response contains. With annotations carrying the safety profile, this modest addition is a 3.

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 core verb and resource come first. It is efficient, though it does not use its brevity budget to add usage or behavioral 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 6-parameter create tool with nested objects and no output schema, the description covers what is built but omits when to use it versus the network mutation siblings. Annotations handle the safety profile, so the definition is minimally viable 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%, so every parameter is already documented in the schema. The description only restates the IP range and optional subnets/routes without adding format or constraint 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?

The description states a specific verb and resource ('Create a new network') and enumerates the created components (IP range, subnets, routes), so an agent can distinguish it from network siblings like get/update/delete. However, it does not explicitly name those alternatives to differentiate.

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, and no reference to alternative tools such as hetzner_add_subnet or hetzner_add_route for extending an existing network. The agent must infer all routing decisions.

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

hetzner_create_placement_groupCreate Placement GroupA

Create a new placement group to control server distribution across hosts.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the placement group
typeYesPlacement group type
labelsNoLabels as key-value pairs

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate a write operation (readOnlyHint=false) and non-destructive nature (destructiveHint=false). The description adds minimal behavioral context beyond stating the creation action; it does not disclose permissions, idempotency (idempotentHint=false), or side effects.

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

Conciseness5/5

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

The description is a single sentence of 11 words, efficiently conveying the core purpose without fluff. It is well-structured and front-loaded with the key action and resource.

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 creation tool with no output schema, the description is minimally adequate. However, it lacks contextual completeness by not explaining the role of placement groups in server distribution, that creation is a prerequisite for adding servers, or that only 'spread' type is available. An AI agent might need more context to use it appropriately.

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?

The input schema has 100% parameter description coverage, so the schema already explains each parameter. The description does not add further meaning or context, such as explaining the effect of the 'spread' type or the purpose of labels, beyond what the schema 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 clearly states the action ('Create') and the resource ('placement group') and provides a brief purpose ('control server distribution across hosts'). This distinguishes it from sibling tools like hetzner_add_server_to_placement_group and hetzner_update_placement_group.

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 such as adding servers to an existing group or updating a group. It does not mention prerequisites, appropriateness of the 'spread' type, or scenarios where creation is needed.

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

hetzner_create_primary_ipCreate Primary IPA

Create a new primary IP with the specified type, optional location, and optional assignee type.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the primary IP
typeYesIP type
labelsNoLabels as key-value pairs
locationNoLocation name (e.g. "fsn1", "nbg1", "hel1")
assignee_idNoServer ID to assign the primary IP to (create-and-assign in one call)
auto_deleteNoDelete the primary IP when the assignee is deleted
assignee_typeNoAssignee type. Optional since 2026-04-27; defaults to "server" until 2026-08-01, then to "unassigned".

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate a non-read-only, non-idempotent operation, and the description aligns with them without contradiction. However, it adds little behavioral detail beyond 'new' creation, such as billing implications, the create-and-assign behavior enabled by assignee_id, or the assignee_type default transition.

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 filler. It immediately communicates the core action and the most relevant parameter categories.

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 create operation with no output schema, the description is somewhat thin on its own, but the schema carries most of the parameter detail. Missing context includes the create-and-assign option via assignee_id and the future default change for assignee_type, both of which are only present in 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%, so the description does not need to compensate. It mentions type, location, and assignee_type, but these are already described in the schema; it adds no significant meaning beyond what the input schema 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 clearly states the action ('Create') and the resource ('a new primary IP'), while noting the key distinguishing parameters (type, optional location, optional assignee type). This makes it easy to differentiate from sibling tools like hetzner_create_floating_ip or hetzner_update_primary_ip.

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 about when to use this tool versus alternatives such as assign_primary_IP or update_primary_IP. The description does not mention conditions, prerequisites, or exclusions, so the agent must infer usage solely from the word 'Create' and the tool name.

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

hetzner_create_serverCreate ServerC

Create a new server with the specified type, image, and configuration options.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the server
imageYesImage name or ID to use (e.g. "ubuntu-22.04", "debian-12")
labelsNoLabels as key-value pairs
volumesNoVolume IDs to attach at creation
locationNoLocation name (e.g. "fsn1", "nbg1", "hel1")
networksNoNetwork IDs to attach the server to
ssh_keysNoSSH key names or IDs to inject
automountNoAuto-mount the volumes passed in "volumes" after attach
firewallsNoFirewalls to apply to the server
user_dataNoCloud-init user data (base64 or plain text)
public_netNoPublic network configuration
server_typeYesServer type name or ID (e.g. "cx22", "cpx11")
placement_groupNoPlacement group ID
start_after_createNoStart server after creation (default: true)

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, idempotentHint=false, and openWorldHint=true, so the mutation and non-idempotency profile is covered by structured data. The description adds essentially nothing behavioral - no note about cost/billing, that creation is asynchronous and returns an action, or that calling it twice creates duplicate servers.

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. It is appropriately terse, though that brevity comes at the cost of substance rather than being purely efficient.

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 14-parameter create operation with nested objects and no output schema, this one-line description is thin. It omits cost implications, the async/action-based return, and any preconditions, leaving the agent to infer almost everything beyond what the schema and annotations supply.

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 14 parameters (including nested public_net and firewalls) are already documented in the schema. The description merely gestures at 'type, image, and configuration options' without adding format or semantics beyond what the schema provides, so the baseline 3 applies.

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

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 new server') and names the three key inputs (type, image, configuration options). It is clearly distinguishable from siblings like hetzner_delete_server, hetzner_update_server, and hetzner_rebuild_server, 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?

There is no guidance on when to use this versus alternatives such as hetzner_rebuild_server or hetzner_resize_server, and no mention of prerequisites (valid server_type/image, quotas, billing). The description only says what the tool does, not when to reach for it.

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

hetzner_create_ssh_keyCreate SSH KeyA

Add a new SSH public key to the project for use when creating servers.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the SSH key
labelsNoLabels as key-value pairs
public_keyYesSSH public key content (e.g. "ssh-rsa AAAA...")

TDQS

A3.7/5.0
Behavior3/5

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

Annotations indicate readOnlyHint=false, destructiveHint=false, idempotentHint=false, and the description states 'Add', which is consistent. However, the description adds no extra behavioral context beyond what annotations already provide, such as potential idempotency or side effects.

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

Conciseness5/5

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

The description is a single concise sentence that front-loads the action and purpose. Every word earns its place, with no wasted or redundant 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?

The description explains the core function but lacks details like return value (no output schema), validation of the public key, or potential constraints. Given the tool's simplicity, the description is adequate but not comprehensive.

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?

Input schema covers 100% of parameters with descriptions. The tool description adds no additional meaning beyond the schema, relying on the schema's parameter descriptions. With high schema coverage, baseline is 3, and no extra value is added from the 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 clearly states the verb (Add), resource (SSH public key), and purpose (for use when creating servers). It distinguishes from sibling tools like list, get, update, and delete SSH keys, making the tool's function 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?

The description does not explicitly mention when to use this tool versus alternatives, nor does it provide exclusions or prerequisites. While the context implies it's for creation, the lack of guidance on when to prefer this tool over other SSH-key-related actions is a gap.

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

hetzner_create_storage_boxCreate Storage BoxA

Create a new Storage Box in the given location and type. Billing applies for the provisioned resource.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the Storage Box
labelsNoLabels as key-value pairs
locationYesID or name of the location, e.g. "fsn1"
passwordYesPassword for the Storage Box main account
ssh_keysNoSSH public keys in OpenSSH format to inject into the Storage Box
access_settingsNoInitial access settings for the Storage Box
storage_box_typeYesID or name of the Storage Box type, e.g. "bx20"

TDQS

A3.7/5.0
Behavior4/5

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

Annotations indicate a non-read-only action, and the description adds the behavioral trait 'Billing applies for the provisioned resource'. This supplements the annotations, but does not disclose other potential side effects like failures or constraints.

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 concise sentences, front-loaded with the core purpose. No unnecessary words, and the billing note is efficiently placed.

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 description covers the basic purpose and billing, but given the tool has 7 parameters, nested objects, and no output schema, it lacks information about the expected return value or any prerequisites/constraints. It is adequate but not comprehensive.

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 itself documents all parameters. The description mentions 'location and type' but adds no new semantic meaning beyond what the schema provides, so the baseline score of 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 clearly states the action ('Create a new Storage Box'), the resource ('Storage Box'), and the key parameters ('in the given location and type'). This distinguishes it from sibling tools like update, delete, or get.

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 'hetzner_create_storage_box_snapshot' or 'hetzner_get_storage_box'. The description implies usage for creation but does not provide exclusions or alternative suggestions.

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

hetzner_create_storage_box_snapshotCreate Storage Box SnapshotA

Create a manual snapshot of a Storage Box, optionally with a description and labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
labelsNoLabels as key-value pairs
descriptionNoHuman-readable description for the snapshot

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate this is a non-read-only, non-destructive, non-idempotent operation. The description adds minimal additional context ('manual snapshot') but does not disclose potential costs, concurrency behavior, or whether overwriting exists. It does not contradict 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?

The description is a single concise sentence that captures the essence. It is front-loaded with the main action and includes optional parameters. While very brief, it has no redundancy and earns its place.

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?

Given that there is no output schema, the description could explain return values or behavior (e.g., returns snapshot object, creation time). It does not. However, the tool is simple and well within the context of sibling snapshot tools, making it functional but not 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?

Since schema description coverage is 100%, all parameters are described in the schema. The description repeats this ('optionally with a description and labels') without adding new semantic detail or clarifying usage beyond what the schema 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 clearly states the action ('Create'), the resource ('manual snapshot of a Storage Box'), and optional parameters ('description and labels'). It distinguishes itself from sibling tools like hetzner_create_storage_box (creates the box itself) and hetzner_enable_storage_box_snapshot_plan (enables automatic snapshots).

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 does not explicitly state when to use this tool versus alternatives like creating automatic snapshots via plans. It only describes the action without providing usage context or exclusions. The usage is implied but not guided.

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

hetzner_create_storage_box_subaccountCreate Storage Box SubaccountB

Create a subaccount on a Storage Box, scoped to a home directory with its own password and access settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
nameNoOptional display name for the subaccount
labelsNoLabels as key-value pairs
passwordYesPassword for the subaccount
descriptionNoHuman-readable description for the subaccount
home_directoryYesHome directory the subaccount is scoped to, e.g. "/backups/web"
access_settingsNoInitial access settings for the subaccount

TDQS

B3.4/5.0
Behavior3/5

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

Annotations indicate it is not read-only or destructive, and description confirms it creates a subaccount. However, it does not disclose potential side effects, authentication needs, or behavior under duplicates. Annotations partially cover safety, but description adds limited 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.

Conciseness5/5

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

The description is a single 14-word sentence that is entirely front-loaded and to the point. There is no unnecessary information, and every word contributes to understanding the tool's primary action.

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?

Given the tool has 7 parameters, nested objects, and no output schema, the description is too brief. It does not describe the return value, confirm that the subaccount is created immediately, or address any potential responses. The agent lacks context on what to expect after 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 100%, so baseline is 3. The description reiterates the purpose of home_directory, password, and access_settings but does not add new meaning beyond the schema descriptions. It adds no novel parameter semantics.

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 clearly states the tool creates a subaccount on a Storage Box with scoping to a home directory, password, and access settings. It distinguishes from siblings like create_storage_box (creates the box itself) and update/delete subaccount 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?

The description provides no explicit guidance on when to use this tool vs alternatives, nor any when-not-to-use conditions. It does not mention prerequisite steps or exclusion criteria.

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

hetzner_create_volumeCreate VolumeA

Create a new volume. Either location or server must be provided to determine placement.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the volume
sizeYesSize of the volume in GB
formatNoFilesystem format for the volume
labelsNoLabels as key-value pairs
serverNoServer ID to attach the volume to. Required if location is not set
locationNoLocation name (e.g. "fsn1"). Required if server is not set
automountNoAuto-mount the volume after attaching to a server

TDQS

A3.7/5.0
Behavior3/5

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

Annotations indicate this is a write, non-destructive, non-idempotent operation with open-world effects. The description adds a placement constraint but does not elaborate on side effects like cost, naming conflicts, or return behavior. It offers some value beyond annotations but remains minimal.

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 extremely concise: two short sentences. The first sentence states the purpose, the second adds a crucial usage constraint. No wasted words; it earns its place.

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?

Given the 7 parameters and no output schema, the description is partly complete. It covers the essential placement rule but omits important context: creating with 'server' attaches the volume, cost implications, and that the volume is initially unattached if only location is given. Schema coverage helps but the description could better round out the 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?

All 7 parameters are fully described in the schema (100% coverage), so the baseline is 3. The description does not add any parameter-specific details beyond what's already in the schema, such as format enum or labels structure. It mentions the 'location' vs 'server' choice but not the semantics of each parameter.

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 clearly states 'Create a new volume', specifying the verb (create) and resource (volume). It adds a key placement constraint ('Either location or server must be provided'), which distinguishes this from sibling tools like attach, list, delete, or update operations.

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 provides a constraint on parameter usage ('Either location or server must be provided'), but lacks explicit guidance on when to use this tool versus alternatives (e.g., attaching an existing volume, or using a different creation tool). Usage is implied but not differentiated.

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

hetzner_create_zoneCreate DNS ZoneA

Create a new DNS zone in primary or secondary mode. Optionally provide TTL, primary nameservers (for secondary), initial RRSets, or a zonefile.

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoDefault TTL in seconds for records in this zone
modeYesZone mode: "primary" (managed here) or "secondary" (transferred from external primary)
nameYesFully qualified domain name of the zone, e.g. "example.com"
labelsNoLabels as key-value pairs
rrsetsNoInitial RRSets to create with the zone
zonefileNoInitial zone content in RFC 1035 zonefile format (alternative to rrsets)
primary_nameserversNoPrimary nameservers (required for secondary zones)

TDQS

A3.8/5.0
Behavior3/5

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

Description accurately states the action without contradicting annotations. Annotations indicate readOnlyHint=false, so creating is expected, but no further behavioral details like idempotency or side effects are provided. With minimal annotations, the description could offer more but is adequate.

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 sentence with only necessary words. Very concise and front-loaded with the core action.

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?

Despite having 7 parameters, nested objects, and no output schema, the description is very brief. It does not explain the mutual exclusivity of rrsets and zonefile, the response structure, or any post-creation behavior. This is insufficient for such a complex 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%, so parameters are well-documented. The description adds a note about primary nameservers being required for secondary zones, which is not in the schema, but overall adds little new meaning 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?

Description clearly states the verb 'Create', the resource 'DNS zone', and the modes 'primary or secondary'. It distinguishes from siblings like 'hetzner_create_zone_rrset' and 'hetzner_import_zonefile' by specifying the scope and optional parameters.

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?

Description mentions optional parameters and the conditional requirement for primary nameservers for secondary zones, but does not explicitly compare to alternatives like import_zonefile or when to use each mode. Still, it provides clear context for usage.

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

hetzner_create_zone_rrsetCreate DNS Zone RRSetC

Create a new RRSet (record set) inside a DNS zone.

ParametersJSON Schema
NameRequiredDescriptionDefault
ttlNoTTL in seconds for records in this RRSet
nameYesRRSet name (e.g. "@", "www", "_acme-challenge")
typeYesDNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)
labelsNoLabels as key-value pairs
recordsNoRecords belonging to this RRSet
id_or_nameYesZone ID or name

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already indicate it is not read-only, not destructive, not idempotent, and open-world. The description adds no additional behavioral context such as authentication needs, error conditions, or idempotency details.

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?

The description is a single concise sentence that front-loads the purpose. It is efficient, but could benefit from slightly more context without becoming verbose.

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?

Given the complexity of creating an RRSet (zone requirement, record formatting, TTL implications), the description is too minimal. It lacks context on prerequisites, record structure, and response behavior (no output 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?

With 100% schema description coverage, the schema already documents parameters well. The description does not add further meaning beyond the schema, so baseline score of 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 clearly states it creates a new RRSet inside a DNS zone. However, it does not explicitly differentiate from siblings like hetzner_add_zone_rrset_records or hetzner_set_zone_rrset_records, which modify existing RRSets.

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 is provided on when to use this tool vs alternatives. It does not mention prerequisites (zone must exist), potential conflicts (duplicate name/type), or related tools for listing zones or adding records.

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

hetzner_delete_certificateDelete CertificateA
DestructiveIdempotent

Delete a certificate. It must not be in use by any load balancer.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate destructive nature, but the description adds the constraint that the certificate must not be in use, which is beyond annotation coverage. No contradictions.

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 concise sentences, front-loaded, no filler. Every sentence adds 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?

For a simple tool with one parameter and no output schema, the description covers purpose and a key constraint. Could briefly mention error behavior if certificate is in use, but it's nearly 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?

The description does not add meaning beyond the schema's description for the id parameter, which already covers it fully. Baseline 3 applies due to 100% schema 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?

Clearly states the verb 'Delete' and resource 'certificate'. The constraint about not being in use by load balancers adds specificity and distinguishes it from other delete tools in the sibling list.

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

Usage Guidelines3/5

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

Provides a prerequisite (certificate must not be in use by load balancer) but does not explicitly state when to use vs alternatives like update or get, nor when not to use it.

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

hetzner_delete_firewallDelete FirewallA
DestructiveIdempotent

Delete a firewall. It must be removed from all resources first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID

TDQS

A4/5.0
Behavior4/5

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

Adds the key precondition that the firewall must be detached before deletion, which is valuable beyond the destructiveHint annotation. No other side effects mentioned, but the prerequisite is critical.

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, no wasted words. Immediately states action then precondition – efficient and 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 delete tool with one parameter, the description covers the crucial prerequisite. Lacks details like error behavior if still attached, but adequate given annotations and schema richness.

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 described as 'Resource ID'). The description adds no further parameter guidance, so baseline score of 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?

Clearly states 'Delete a firewall' – specific verb and resource. Distinguishes from siblings like hetzner_remove_firewall by the action (delete vs remove).

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 prerequisite: firewall must be removed from all resources first. However, does not explicitly compare to hetzner_remove_firewall or indicate when to use delete versus remove.

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

hetzner_delete_floating_ipDelete Floating IPA
DestructiveIdempotent

Delete a floating IP permanently. Since 2026-05-01 the floating IP must be unassigned first; otherwise the API returns the must_be_unassigned error code.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesFloating IP ID

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true. The description adds a key behavioral constraint: the API requires the IP to be unassigned since 2026-05-01. This goes beyond annotations by providing a temporal rule and error condition, helping the agent avoid failures.

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 with no wasted words. The first sentence states the action, the second adds a critical constraint. Every word contributes to the tool's understanding.

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 simple destructive operation with one parameter, the description covers the essential purpose and a vital precondition. No output schema is needed for a delete operation. The description is complete enough for an agent to use 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?

The input schema has 100% coverage with a single parameter 'id' described as 'Floating IP ID'. The description does not add any additional semantic detail about the parameter itself. Baseline score of 3 is appropriate since schema covers it fully.

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 clearly states 'Delete a floating IP permanently,' which is a specific verb-resource combination. It distinguishes itself from sibling tools like hetzner_delete_firewall or hetzner_delete_certificate by focusing on floating IPs. The added detail about the unassignment requirement further clarifies scope.

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 explicitly states that the floating IP must be unassigned first, providing a crucial precondition. It also mentions the error code (must_be_unassigned) for feedback. While it does not name the alternative tool (hetzner_unassign_floating_ip), the guidance is clear enough for an agent to infer the correct sequence.

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

hetzner_delete_imageDelete ImageA
DestructiveIdempotent

Permanently delete a snapshot or backup image.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesImage ID

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds context by specifying 'permanently delete' and restricting to snapshots/backups, clarifying the irreversibility and scope. No contradictions with annotations.

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

Conciseness5/5

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

The description is a single, concise sentence with no extraneous words. It efficiently conveys the core action and resource, achieving high front-loading and minimalism.

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?

The description adequately covers the delete action and irreversibility. However, it does not mention prerequisites like removing protection (via 'change_image_protection') or that the image must not be in use, which would enhance completeness 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 coverage for the single parameter 'id' is 100% with description 'Image ID'. The tool description adds no further semantic information about the parameter, so a baseline score of 3 is 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?

The description 'Permanently delete a snapshot or backup image' uses a specific verb ('delete') and resource ('snapshot or backup image'), clearly distinguishing it from sibling tools like 'update_image' or 'change_image_protection'.

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 lacks explicit guidance on when to use this tool vs alternatives. It does not mention conditions (e.g., image must not be protected) nor direct users to other tools like 'change_image_protection' if deletion is blocked.

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

hetzner_delete_lb_serviceDelete Load Balancer ServiceA
DestructiveIdempotent

Remove a service from a load balancer by its listen port.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
listen_portYesListen port of the service to delete

TDQS

A3.5/5.0
Behavior2/5

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

Annotations already provide destructiveHint=true and idempotentHint=true. The description adds no new behavioral context (e.g., prerequisites, error handling, state changes). Bare minimum, does not contradict 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?

Extremely concise (12 words), single sentence with verb front-loaded. No unnecessary text.

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 does not mention return values or side effects. For a simple delete operation, this may be adequate but lacks context on success/failure behavior. Siblings similarly brief; still room for improvement.

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 descriptions for both id and listen_port. The description reiterates the listen port as identifier but adds little beyond what the schema provides. Meets 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?

Specific verb 'Remove' and resource 'service from a load balancer', with identification by listen port. Clearly distinguishes from deleting the entire load balancer (sibling hetzner_delete_load_balancer) and updating a service (hetzner_update_lb_service).

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 when needing to remove a service, but no explicit mention of when not to use it or alternatives like hetzner_update_lb_service or hetzner_delete_load_balancer. The context is clear but guidance is minimal.

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

hetzner_delete_load_balancerDelete Load BalancerB
DestructiveIdempotent

Permanently delete a load balancer.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID

TDQS

B3.3/5.0
Behavior3/5

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

The description adds 'permanently' to confirm irreversibility, but the annotations already set destructiveHint=true and idempotentHint=true. The description does not disclose additional behaviors like side effects on associated resources (e.g., services, targets).

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 concise sentence that communicates the essential action without extra words. It is front-loaded and earns its place.

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 delete tool with one parameter and annotations present, the description is minimally adequate. However, it lacks mention of behavior if the resource does not exist (despite idempotentHint) or any prerequisites (e.g., whether the load balancer must be detached).

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?

The input schema has one parameter 'id' with description 'Resource ID' (100% coverage). The tool description does not elaborate beyond this, so it adds marginal value. Baseline 3 is appropriate given high schema coverage.

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 the action 'delete' and the resource 'load balancer', using the adverb 'permanently' for emphasis. It distinguishes well from sibling delete tools that target different resources (e.g., servers, networks).

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 usage guidance is provided. There is no indication of when to use this tool versus alternatives like hetzner_delete_lb_service or hetzner_detach_lb_from_network, nor any prerequisites or conditions.

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

hetzner_delete_networkDelete NetworkA
DestructiveIdempotent

Delete a network. All subnets and routes within it will also be deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID

TDQS

A4/5.0
Behavior4/5

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

Annotations already include destructiveHint=true and idempotentHint=true. The description adds important behavioral context that subnets and routes are deleted along with the network, which goes beyond the annotations. No contradictions.

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 concise with two sentences, front-loading the main action and then adding the cascading deletion detail. No superfluous 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 simple one-parameter delete tool, the description covers the key effect (cascading deletion). No output schema is needed, but it could mention return value or async nature. Still adequate given tool simplicity.

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 one parameter 'id' with schema description 'Resource ID'. The description does not add additional meaning beyond the schema. Schema coverage is 100%, so baseline 3 is 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?

The description clearly states 'Delete a network' and specifies the cascading effect on subnets and routes. This distinguishes it from related tools like hetzner_delete_subnet or hetzner_delete_route.

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 indicates the tool is for deleting a network with its subnets/routes, but does not provide when-not-to-use guidance or contrast with alternatives like individual subnet/route deletion. Usage context is implied but not explicit.

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

hetzner_delete_placement_groupDelete Placement GroupA
DestructiveIdempotent

Delete a placement group. All servers must be removed from it first.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPlacement group ID

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructive and idempotent behavior. The description adds the crucial precondition about server removal, which is not captured by 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 sentences: first states the action, second states the prerequisite. No redundant words, front-loaded, highly efficient.

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?

Adequate for a simple delete tool with one parameter. Precondition is covered. No output schema is needed for a delete 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 coverage is 100%, so the parameter 'id' is fully documented in the schema. The description adds no additional meaning beyond the schema's field 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 clearly states the action 'Delete a placement group' and adds a necessary precondition, distinguishing it from sibling tools like 'hetzner_update_placement_group' or 'hetzner_get_placement_group'.

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 explicit guidance on when to use: only after all servers are removed. Does not name alternatives but the prerequisite is clear.

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

hetzner_delete_primary_ipDelete Primary IPA
DestructiveIdempotent

Delete a primary IP permanently. Since 2026-05-01 the primary IP must be unassigned first; otherwise the API returns the must_be_unassigned error code.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPrimary IP ID

TDQS

A4.2/5.0
Behavior4/5

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

The description adds context beyond annotations by specifying the date-dependent requirement and the 'must_be_unassigned' error code. It confirms destructive behavior, aligning with annotations without contradiction.

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

Conciseness5/5

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

Extremely concise: two sentences deliver the action and a critical behavioral condition with no extraneous content. Every word is justified.

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 delete tool, the description covers the essential behavior (permanence, precondition). Absence of output schema is acceptable as the action is final; the description sufficiently informs 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?

The sole parameter 'id' is fully documented in the schema (100% coverage). The description adds no extra meaning beyond what the schema already provides, which is adequate for a simple numeric ID.

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 clearly states the action ('Delete') and the resource ('primary IP'), with emphasis on permanence. It is distinct from sibling tools that update, assign, or list primary IPs.

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 provides a specific prerequisite: 'must be unassigned first' since a certain date, and notes the resulting error code if violated. This guides correct usage, though it lacks explicit alternatives or when-not-to-use advice.

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

hetzner_delete_routeDelete Route from NetworkB
DestructiveIdempotent

Remove a route from an existing network.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
gatewayYesGateway of the route to delete
destinationYesDestination network of the route to delete

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already indicate destructive (destructiveHint=true) and idempotent (idempotentHint=true) behavior. The description adds only the phrase 'from an existing network', which does not significantly expand behavioral context beyond annotations.

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

Conciseness4/5

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

A single, concise sentence that is front-loaded with the verb and resource. No wasted words, but could be slightly more informative.

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 description is minimally adequate for a straightforward delete operation. It assumes the user knows what a route is and does not mention return values (no output schema), error scenarios, or the need for an existing network.

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 each parameter (id, destination, gateway) having a description in the input schema. The description adds no additional parameter meaning beyond what the schema 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 'Remove a route from an existing network' clearly states the action (remove) and the resource (route within a network), distinguishing it from siblings like add_route or delete_subnet.

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 (e.g., add_route for adding, delete_network for the whole network). No prerequisites or exclusions mentioned.

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

hetzner_delete_serverDelete ServerA
DestructiveIdempotent

Permanently delete a server. This destroys the server and all associated data.

ParametersJSON Schema
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 indicate destructive and idempotent behavior. The description adds context by specifying 'all associated data' is destroyed, providing additional transparency 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?

Two concise sentences, front-loaded with the key action. Every word serves a purpose with no 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 simple one-parameter tool with no output schema, the description covers the action and consequences. However, it could mention that the server must exist or what happens on invalid ID.

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 the parameter 'id' already described as 'Server ID'. The description does not add any new meaning beyond what the schema 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 clearly states the tool permanently deletes a server and destroys all associated data, using specific verbs and resources, distinguishing it from other sibling tools like delete volume or delete firewall.

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 explicit guidance on when to use this tool versus alternatives such as rebuild server or power off. The description does not mention prerequisites or when not to use it.

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

hetzner_delete_ssh_keyDelete SSH KeyA
DestructiveIdempotent

Delete an SSH key from the project permanently.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSSH key ID

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate destructive and idempotent hints. The description adds 'permanently', emphasizing irreversibility, but does not disclose potential side effects (openWorldHint=true) or behavior on already-deleted 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?

A single, front-loaded sentence with zero waste. Every word (Delete, SSH key, project, permanently) adds 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?

For a simple destructive action with one parameter and no output schema, the description covers the essential purpose and scope. However, with an openWorldHint, brief mention of side effects would improve completeness.

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%; the parameter 'id' is described as 'SSH key ID'. The description adds no additional detail beyond schema context, meeting the baseline but not exceeding it.

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 clearly states the verb 'Delete', the resource 'an SSH key', and the scope 'from the project permanently'. It distinguishes this tool from create, update, and read 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?

No explicit when-to-use or when-not-to-use guidance is provided. Alternatives like updating or listing keys are not mentioned, leaving the agent to infer context 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.

hetzner_delete_storage_boxDelete Storage BoxA
DestructiveIdempotent

Delete a Storage Box and all of its data permanently. The Storage Box must not be delete-protected.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds value by specifying that the deletion is permanent and requires the Storage Box to not be delete-protected, providing context beyond annotations. No contradiction.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the action, and every sentence adds value (action, permanence, prerequisite). No redundant or missing 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 tool with one parameter, no output schema, and comprehensive annotations, the description provides all necessary context: what the tool does, that it's destructive and idempotent, and a critical precondition.

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?

Input schema has 100% coverage with a description for 'id' as 'Storage Box ID'. The tool description does not add additional meaning or explanation for the parameter, so baseline score of 3 is 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?

The description clearly states the verb 'Delete' and specific resource 'Storage Box', and distinguishes from sibling deletion tools by specifying the resource. It also mentions permanent deletion and a prerequisite condition.

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 condition ('must not be delete-protected') for using the tool, but does not explicitly mention when to use it over alternatives or provide exclusions. It implicitly differentiates from other deletion tools by resource name.

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

hetzner_delete_storage_box_snapshotDelete Storage Box SnapshotB
DestructiveIdempotent

Delete a Storage Box snapshot permanently.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
snapshot_idYesSnapshot ID

TDQS

B3.4/5.0
Behavior3/5

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

The description adds 'permanently' beyond annotations, reinforcing the destructive and irreversible nature already indicated by destructiveHint=true. However, it does not disclose additional behaviors (e.g., effect on Storage Box, error states, or idempotent retry 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?

Very concise single-sentence description with no wasted words. Could benefit from a tiny bit more context but remains 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?

For a simple destructive tool with only two parameters and no output schema, the description covers the essential purpose. However, it lacks mention of response behavior or side effects, relying on annotations for safety profile.

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 clear descriptions for both parameters ('Storage Box ID' and 'Snapshot ID'). The description adds no further semantic meaning beyond what the input 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 'Delete a Storage Box snapshot permanently' uses a specific verb (Delete) and resource (Storage Box snapshot), clearly distinguishing it from related sibling tools like create, rollback, update, and enable/disable snapshot plan.

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 rollback (which restores from a snapshot) or update (which modifies snapshot settings). No prerequisites or context about irreversible nature beyond the word 'permanently'.

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

hetzner_delete_storage_box_subaccountDelete Storage Box SubaccountA
DestructiveIdempotent

Delete a Storage Box subaccount permanently. Its home directory contents are not removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
subaccount_idYesSubaccount ID

TDQS

A4/5.0
Behavior4/5

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

Annotations provide destructiveHint, idempotentHint, and openWorldHint. The description adds value by specifying that the deletion does not remove home directory contents, which is important behavioral context beyond annotations.

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

Conciseness5/5

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

Two concise sentences front-load the purpose and add a critical behavioral note. No redundant or unnecessary 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 simple delete tool, the description covers the key effect (deletion, no removal of contents). It lacks details on reversibility or prerequisites, but annotations already provide idempotency and destructiveness hints.

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 has 100% coverage with descriptions for both parameters ('Storage Box ID' and 'Subaccount ID'). The description does not add additional meaning or format details 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 clearly states the action (Delete) and the resource (Storage Box subaccount), and distinguishes it from related tools like 'hetzner_delete_storage_box' by noting that home directory contents are not removed.

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 usage for deleting a subaccount but does not explicitly state when to use it versus alternatives (e.g., deleting the entire storage box). No guidance on prerequisites or post-conditions.

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

hetzner_delete_subnetDelete Subnet from NetworkB
DestructiveIdempotent

Remove a subnet from an existing network by its IP range.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
ip_rangeYesIP range of the subnet to delete

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds 'Remove a subnet', which is consistent but provides no extra behavioral details (e.g., what happens if the subnet is missing, or if it's idempotent). Minimal value beyond annotations.

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

Conciseness5/5

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

One concise sentence that conveys the core functionality without any extraneous words. Highly 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?

For a simple delete operation, the description covers the basic purpose and parameters. However, it lacks usage guidelines and behavioral details (e.g., idempotency, effect of deletion). With annotations covering safety, it's adequate but not 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% with descriptions for both 'id' and 'ip_range'. The description mentions 'by its IP range', adding slight context but not significantly beyond what the schema provides. Baseline of 3 is 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?

The description clearly states the action 'Remove a subnet' and the resource 'from an existing network', uniquely identifying it by IP range. This distinguishes it from siblings like 'delete_network' (deletes entire network) and 'add_subnet' (adds).

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 (e.g., deleting the whole network or removing via other means). The description does not specify prerequisites (e.g., network must exist) or when not to use it.

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

hetzner_delete_volumeDelete VolumeA
DestructiveIdempotent

Delete a volume permanently. The volume must be detached from any server.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesVolume ID

TDQS

A4.2/5.0
Behavior4/5

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

Adds 'permanently' and detachment requirement beyond annotations. Annotations already indicate destructive and idempotent behavior; description reinforces and adds context without contradiction.

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

Conciseness5/5

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

Two concise sentences with no redundancy. Front-loaded with core action and immediately adds critical precondition.

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?

Sufficient for a simple delete tool with one parameter, no output schema, and annotations present. Covers action and precondition; could mention what happens if volume is attached (though implied).

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 covers 100% of the single parameter (id) with description. Description adds no additional meaning beyond schema, meeting the baseline for 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?

Clearly states 'Delete a volume permanently', identifying the specific verb and resource. Differentiates from sibling tools like create, attach, detach, and update volumes.

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 a clear precondition: 'volume must be detached from any server'. Implicitly guides when to use (when volume is detached) and hints at alternative (detach first if attached), though not explicitly stated.

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

hetzner_delete_zoneDelete DNS ZoneA
DestructiveIdempotent

Delete a DNS zone and all of its RRSets permanently. The zone must not be delete-protected.

ParametersJSON Schema
NameRequiredDescriptionDefault
id_or_nameYesZone ID or name

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate destructive and idempotent behavior. The description adds value by specifying the permanent deletion and cascading effect on all RRSets, as well as the delete-protection constraint.

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 concise sentences with essential information, no fluff.

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 simple delete tool with one parameter and no output schema, the description covers the action, effect, and a key constraint, making it complete enough for an AI 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 coverage is 100% and the parameter is described in the schema as 'Zone ID or name'. The description adds no additional meaning 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 clearly states the action 'Delete a DNS zone' and specifies the permanent deletion of all RRSets, distinguishing it from sibling tools like hetzner_delete_zone_rrset and hetzner_change_zone_protection.

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 mentions a precondition (zone must not be delete-protected) but does not explicitly guide when to use this tool over alternatives or provide when-not-to-use scenarios.

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

hetzner_delete_zone_rrsetDelete DNS Zone RRSetA
DestructiveIdempotent

Delete an RRSet from a DNS zone permanently. The RRSet must not be change-protected.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRRSet name
typeYesDNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)
id_or_nameYesZone ID or name

TDQS

A4/5.0
Behavior4/5

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

The annotations already mark the operation as destructive and non-read-only, so the description adds useful context by stating the deletion is permanent and by flagging the change-protection precondition. This goes beyond what annotations alone 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?

The description is two short sentences with the primary action front-loaded and the critical precondition immediately after. Every word earns its place and there is no redundant restating of the schema.

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 destructive operation with full parameter documentation and safety annotations, the description provides the essential behavioral context: permanence and the change-protection requirement. It could mention related record-level operations, but nothing critical is missing for invoking this 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?

The input schema fully describes all three parameters, including the type enum and the id_or_name flexibility. The description does not add additional parameter-level meaning, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description names the exact operation — deleting an RRSet from a DNS zone — and adds the important qualifier 'permanently.' This distinguishes it clearly from sibling tools like delete_zone, update_zone_rrset, and remove_zone_rrset_records.

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 this tool is for removing an entire RRSet and gives one explicit exclusion: it must not be change-protected. However, it does not point to alternatives such as remove_zone_rrset_records for partial record removal, nor does it explain how to handle a protected RRSet.

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

hetzner_detach_isoDetach ISO from ServerA
DestructiveIdempotent

Detach an ISO image from a server. The server must be rebooted for the change to take effect.

ParametersJSON Schema
NameRequiredDescriptionDefault
server_idYesServer ID to detach the ISO from

TDQS

A3.9/5.0
Behavior4/5

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

Annotations indicate destructive and idempotent behavior. Description adds the important behavioral detail that a server reboot is required for the change to take effect, which is 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?

Two sentences, no fluff. Front-loaded with the action, then key side effect. Every word earns its place.

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, but the tool is simple. However, the description does not specify whether the server needs to be powered off before detaching, which could be relevant for user expectations.

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 covers the single parameter 'server_id' with a clear description. The tool description does not add extra information about the parameter, so baseline 3 is 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?

Clear verb 'Detach' and resource 'ISO from a server'. Distinguishes from sibling 'hetzner_attach_iso' by describing the inverse operation.

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 states a required post-action (reboot) but does not provide explicit guidance on when to use this tool versus alternatives, such as other detach tools or when not to use it.

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

hetzner_detach_lb_from_networkDetach Load Balancer from NetworkB
DestructiveIdempotent

Detach a load balancer from a network.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
networkYesNetwork ID to detach from

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already provide destructiveHint, idempotentHint, and readOnlyHint. The description adds no behavioral details beyond those, such as side effects, permissions, or error conditions.

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?

Very concise single sentence, front-loaded with the key action and resource. No wasted words.

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 detach operation requiring two IDs, the description is adequate but brief. Annotations cover safety aspects, but the description doesn't mention idempotency or reassuring callers of safe re-attempts.

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 clear parameter descriptions. The tool description does not add additional meaning, so baseline score of 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 clearly states the action 'Detach' and the specific resource 'load balancer from a network', distinguishing it from sibling tools like hetzner_attach_lb_to_network and other detach operations.

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, no prerequisites or context provided. The description merely restates the tool name without usage hints.

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

hetzner_detach_server_from_networkDetach Server from NetworkA
DestructiveIdempotent

Detach a server from a private network, removing its private connectivity on that network.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID
networkYesID of the network to detach the server from

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true. Description adds 'removing its private connectivity', which aligns but does not elaborate on side effects (e.g., public network reachability). No contradiction with annotations.

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

Conciseness5/5

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

Single sentence, 12 words, clearly front-loaded with action and resource. No wasted words.

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 low complexity (2 params, no output schema), the description sufficiently covers the purpose and effect. Could mention potential IP changes, but not essential.

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% (both parameters have descriptions). Description does not add any additional meaning beyond the schema's description of IDs. Baseline 3 is 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?

The description clearly states the action (detach), the resource (server from network), and the effect (removing private connectivity). It distinguishes from sibling tools like 'hetzner_attach_server_to_network'.

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 guidance on when to use this tool versus alternatives. The purpose itself implies usage (when needing to remove a server from a network), but no exclusions or context are provided.

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

hetzner_detach_volumeDetach VolumeB
DestructiveIdempotent

Detach a volume from the server it is attached to.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesVolume ID

TDQS

B3.4/5.0
Behavior2/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds no extra behavioral context beyond stating the action, such as potential side effects or system impacts.

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 one concise sentence without any redundant or verbose elements. It is efficiently 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 operation with one parameter and no output schema, the description is largely adequate. However, it could mention that the volume becomes free for reattachment, which adds minimal but useful 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?

The single parameter 'id' is fully described in the schema ('Volume ID'). The tool description adds no additional meaning, so baseline score of 3 is appropriate given 100% schema 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 clearly states the action 'Detach a volume from the server it is attached to', specifying a specific verb and resource. It distinguishes from sibling tools like 'hetzner_attach_volume' and other detach operations.

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 guidance on when to use this tool, prerequisites (e.g., volume must be attached), or when not to use it. No alternatives or exclusions are mentioned.

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

hetzner_disable_backupDisable Server BackupA
DestructiveIdempotent

Disable automatic backups for a server and remove all existing backup snapshots.

ParametersJSON Schema
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 indicate destructiveness; description clarifies exactly what is destroyed (backup snapshots). Adequate transparency for a simple 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?

Extremely concise single sentence. No fluff.

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?

Tool is simple; description covers the action and effect. Could mention idempotency or prerequisites but not critical.

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 already fully describes the single parameter. Description adds no semantic enrichment.

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?

Clearly states action (disable) and dual effect (stops backups, removes snapshots). Unambiguous and specific.

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 usage guidance provided. Agent must infer from name and description alone. No comparison to alternatives like enable_backup or other disable tools.

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

hetzner_disable_lb_public_interfaceDisable Load Balancer Public InterfaceA
DestructiveIdempotent

Disable the public network interface of a load balancer, removing its public connectivity.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesLoad Balancer ID

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate this is destructive and idempotent. The description adds the effect 'removing its public connectivity', which is helpful. Could be more transparent about consequences (e.g., load balancer becomes internal-only, impact on services), but overall good.

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?

Single sentence, no redundancy, clearly states action and effect. Every word earns its place.

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?

Given the tool's simplicity (one parameter, no output schema, annotations present), the description is complete. It adequately conveys the operation without needing additional 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% with 'Load Balancer ID' clearly specified. The description does not add additional semantics beyond the schema, so baseline score of 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 uses a specific verb ('Disable') and resource ('public network interface of a load balancer'), clearly distinguishing the action from its sibling 'hetzner_enable_lb_public_interface' and other load balancer tools.

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 you want to remove public connectivity, but lacks explicit when-to-use or when-not-to-use guidance or alternatives. For a straightforward tool this is adequate, but no exclusions or context provided.

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

hetzner_disable_rescueDisable Rescue ModeA
Idempotent

Disable rescue mode on a server. The next reboot will boot normally.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate non-destructive, read-write, idempotent behavior. The description adds that the next reboot boots normally, but does not disclose error cases or required preconditions.

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 with zero wasted words, directly stating the action and effect.

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 single-parameter tool with good annotations, the description is complete enough to convey the action and outcome, though missing return value info.

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 the parameter description 'Server ID'. The tool description adds no extra meaning 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 clearly states the verb 'disable' and the resource 'rescue mode on a server', and distinguishes from the sibling `hetzner_enable_rescue` by specifying that the next reboot will boot normally.

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 usage guidance is given; it is implied that the tool is used when rescue mode should be disabled, but no when-to-use or when-not-to-use instructions are provided.

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

hetzner_disable_storage_box_snapshot_planDisable Storage Box Snapshot PlanA
Idempotent

Disable the automatic snapshot plan for a Storage Box. Existing snapshots are kept.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID

TDQS

A3.9/5.0
Behavior4/5

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

Annotations indicate idempotent and non-destructive. The description adds 'Existing snapshots are kept,' clarifying behavior beyond annotations, though no side effects are disclosed.

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

Conciseness5/5

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

Two sentences, no filler. The description is front-loaded with the action and adds a key clarification.

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 simple disable action, but lacks mention of prerequisites (e.g., plan must be enabled) or return behavior. Without output schema, some guidance on response could 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 coverage is 100% and the parameter 'id' is described as 'Storage Box ID.' The description does not add extra context, but baseline 3 is 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?

The description clearly states the action: 'Disable the automatic snapshot plan for a Storage Box.' It adds a clarifying note that existing snapshots are kept, distinguishing it from 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?

The description implies when to use (to disable the plan) but does not explicitly state when not to use or suggest alternatives like enable_storage_box_snapshot_plan or delete_storage_box_snapshot.

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

hetzner_enable_backupEnable Server BackupA
Idempotent

Enable automatic daily backups for a server. Backups increase the server price by 20 percent. The backup window is chosen automatically.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID

TDQS

A4/5.0
Behavior4/5

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

Annotations declare the tool is not read-only or destructive, and is idempotent. The description adds valuable behavioral details: backups increase price by 20% and the backup window is chosen automatically. No contradiction with annotations.

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

Conciseness5/5

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

Three short, relevant sentences deliver core action, cost implication, and scheduling info. No extraneous content.

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 simple one-parameter action and annotations (idempotentHint), the description adequately covers the purpose, cost, and automatic behavior. It does not describe the response, but no output schema exists, and the action is straightforward.

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?

The input schema already fully describes the single parameter 'id' with 'Server ID'. The description does not add any additional meaning beyond what the schema provides, so baseline score of 3 is 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?

The description clearly states the action ('Enable automatic daily backups') and the resource ('for a server'), distinguishing it from the sibling tool 'hetzner_disable_backup'.

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 provides usage context (daily backups, price increase, automatic window) but does not explicitly specify when to use this tool versus alternatives or when not to use it.

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

hetzner_enable_lb_public_interfaceEnable Load Balancer Public InterfaceA
Idempotent

Enable the public network interface of a load balancer so it can be reached over public IPs.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesLoad Balancer ID

TDQS

A3.6/5.0
Behavior2/5

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

The description adds little beyond the annotations. Annotations already indicate it's a non-destructive, idempotent mutation. The description only states the effect (enable public interface) without additional behavioral context such as prerequisites, side effects, 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.

Conciseness5/5

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

The description is a single, efficient sentence that is front-loaded with the key action and resource. Every word adds 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?

For a simple enable action with one parameter, clear annotations, and no output schema, the description is sufficient to guide a reasonable agent. It explains the purpose and the result, though it could optionally mention that this affects public IP reachability only.

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 the single parameter 'id' described as 'Load Balancer ID'. The description mentions 'load balancer' which reinforces the parameter's context, but does not add new meaning 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 clearly states the action 'Enable', the resource 'public network interface of a load balancer', and the purpose 'so it can be reached over public IPs'. It distinguishes itself from the sibling tool 'hetzner_disable_lb_public_interface' which does the opposite.

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 usage when needing a load balancer to be publicly accessible, but does not explicitly state when to use this tool versus alternatives or provide any exclusion criteria or prerequisites.

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

hetzner_enable_rescueEnable Rescue ModeA

Enable rescue mode on a server. The server must be rebooted to enter rescue mode.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID
typeNoRescue system type
ssh_keysNoSSH key IDs to inject into rescue system

TDQS

A3.8/5.0
Behavior4/5

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

Annotations provide minimal behavioral info (readOnlyHint false, etc.). The description adds an important behavioral trait: the server must be rebooted to enter rescue mode. This is critical for the agent to understand post-invocation steps.

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, no fluff. Front-loads the main action and adds a crucial follow-up step efficiently.

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 no output schema and the tool is a mutation, the description covers the essential action and a key consequence (reboot required). However, it could mention that rescue mode provides root access for recovery, but not a major 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?

Input schema has 100% description coverage for all parameters (id, type, ssh_keys). The description does not add extra meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action ('Enable rescue mode') and the resource ('on a server'), using a specific verb+resource combination. It distinguishes from siblings like hetzner_disable_rescue.

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 (e.g., hetzner_rebuild_server or hetzner_reset). No prerequisites or limitations mentioned beyond the reboot requirement.

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

hetzner_enable_storage_box_snapshot_planEnable Storage Box Snapshot PlanA
Idempotent

Enable or update the automatic snapshot plan for a Storage Box (schedule and retention).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
hourYesHour of the day to run the snapshot (0-23, UTC)
minuteYesMinute of the hour to run the snapshot (0-59)
day_of_weekNoDay of week to run weekly (1=Monday .. 7=Sunday), or null
day_of_monthNoDay of month to run monthly (1-31), or null
max_snapshotsYesMaximum number of automatic snapshots to retain

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already indicate idempotentHint=true and readOnlyHint=false, so the description adds 'or update' which aligns with idempotency. However, it does not disclose additional behavioral traits beyond what annotations provide, such as whether existing snapshots are affected or if the plan triggers immediately.

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 sentence of 14 words, front-loaded with the verb, and contains no unnecessary words or information. It is highly concise and well-structured.

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?

Given the tool has 6 parameters and no output schema, the description is adequate but lacks elaboration. It could explain that the plan configures recurring automatic snapshots, and differentiate between enabling a new plan vs updating an existing one. However, it covers the essentials.

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 parameters have descriptions. The description adds value by summarizing the parameters' collective purpose ('schedule and retention'), which helps the agent understand the intent behind the individual fields.

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 clearly states the action ('Enable or update') and the resource ('automatic snapshot plan for a Storage Box'), including the scope (schedule and retention). It distinguishes this tool from siblings like 'disable_storage_box_snapshot_plan' and 'create_storage_box_snapshot'.

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 the tool should be used to enable or update the snapshot plan, but it does not provide explicit guidance on when to use this tool versus disabling the plan or creating individual snapshots. No prerequisites or exclusions are mentioned.

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

hetzner_export_zonefileExport DNS ZonefileA
Read-onlyIdempotent

Export the current contents of a DNS zone as an RFC 1035 zonefile string.

ParametersJSON Schema
NameRequiredDescriptionDefault
id_or_nameYesZone ID or name

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=true, destructiveHint=false, idempotentHint=true. Description adds little extra beyond 'export the current contents', which is consistent but not additive.

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?

Single sentence of 16 words, front-loaded with purpose. No verbose or redundant 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 simple read-only tool with one parameter and no output schema, the description adequately explains the input, action, and output format. Could hint at the string nature of the return value, but overall sufficient.

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 covers 100% of the single parameter with description 'Zone ID or name'. The tool description does not add further meaning, 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?

Description clearly states verb 'Export', resource 'DNS zone', and format 'RFC 1035 zonefile string'. Among siblings, it contrasts with 'hetzner_import_zonefile', making its purpose distinct.

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 guidance on when to use this tool versus alternatives like 'hetzner_get_zone'. The description implies use for exporting raw zone data but does not provide context-dependent advice.

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

hetzner_get_certificateGet CertificateA
Read-onlyIdempotent

Get details of a specific certificate by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID

TDQS

A3.5/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true, indicating a safe read operation. The description adds no behavioral context beyond 'Get details', so it provides no added value over 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?

Single sentence, front-loaded, no unnecessary words. Efficient and clear.

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 get-by-ID tool with good annotations, the description covers core purpose. However, no mention of return format or edge cases. Adequate for its simplicity.

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?

Single parameter 'id' with schema description 'Resource ID' (100% coverage). The description does not add extra meaning beyond the schema, meeting baseline expectation.

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?

Description clearly states 'Get details of a specific certificate by its ID', specifying verb, resource, and retrieval method. It distinguishes from siblings like 'hetzner_list_certificates' (list all) and 'hetzner_create_certificate' (create).

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 guidance on when to use vs alternatives, such as 'hetzner_list_certificates'. The description implies retrieval of a single item, but lacks when-not-to-use or prerequisite info. Adequate but minimal.

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

hetzner_get_firewallGet FirewallB
Read-onlyIdempotent

Get details of a specific firewall by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID

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, idempotentHint=true, and destructiveHint=false. Description merely repeats the action 'get details' without adding any behavioral context such as authentication needs, rate limits, or what the response contains.

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?

Single sentence with no wasted words. Could be slightly more informative but is acceptably 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?

With one required parameter, no output schema, and annotations covering safety, the description is functional but minimal. It does not mention what fields the response includes, though the tool is simple enough that this may be inferred.

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 the single parameter 'id' described as 'Resource ID'. The description does not add any additional meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

Clearly states verb 'Get', resource 'details of a specific firewall', and identifier 'by its ID'. Distinguishes from siblings like `hetzner_list_firewalls` which lists all firewalls.

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?

Description does not explicitly advise when to use this tool versus alternatives like `hetzner_list_firewalls`. The context of a single resource retrieval is implied but not stated.

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

hetzner_get_floating_ipGet Floating IPA
Read-onlyIdempotent

Get details of a specific floating IP by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesFloating IP ID

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true. The description adds 'Get details' which aligns with these hints but does not provide additional behavioral context such as authentication requirements, rate limits, or response structure. With annotations covering safety, a score of 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?

The description is a single sentence of 9 words, front-loaded with the verb 'Get'. Every word is necessary and no redundancy. It is maximally concise for the information provided.

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 one required parameter, no output schema, comprehensive annotations, and distinct sibling tools, the description is complete for a simple read operation. It tells the agent exactly what it does and how, with no missing information.

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?

The input schema has 100% coverage with description 'Floating IP ID'. The tool description adds 'by ID', reinforcing that the parameter is an identifier. This adds minimal meaning beyond the schema, so baseline 3 is correct.

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 'Get details of a specific floating IP by ID' uses specific verb 'get' and resource 'floating IP', clearly distinguishing from sibling tools like 'hetzner_list_floating_ips' (list all) and 'hetzner_create_floating_ip' (create). It explicitly identifies how the resource is identified (by ID).

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 states the tool retrieves details for a specific floating IP by ID, implying the need for a known ID. It provides clear context for when to use this tool (reading details of a single IP) versus listing or modifying. No explicit 'when not to use' is stated, but the purpose is sufficiently clear.

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

hetzner_get_imageGet ImageB
Read-onlyIdempotent

Get details of a specific image by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesImage ID

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, etc. Description adds no additional behavioral context like rate limits or return details.

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 concise single sentence, but could be improved by adding minimal context without sacrificing brevity.

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?

Minimally complete for a simple read-by-ID tool without output schema; would benefit from stating what details are returned.

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 description adds no extra meaning beyond the schema's 'Image ID' for the id parameter.

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 clearly states the verb 'Get', the resource 'image', and the qualifier 'by ID', distinguishing it from list tools like hetzner_list_images.

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 explicit guidance on when to use vs alternatives such as list_images; only implied context from 'by ID'.

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

hetzner_get_isoGet ISOA
Read-onlyIdempotent

Get details of a specific ISO image by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesISO 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, destructiveHint=false, idempotentHint=true, and openWorldHint=true, so the safety profile is clear. The description adds no behavioral traits beyond stating the action, but does not contradict annotations. With annotations present, a score of 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?

The description is a single sentence of 8 words with no redundancy. Every word earns its place, and the structure front-loads the action and resource.

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 one-parameter get operation with annotations, the description is nearly complete. It specifies the action and key parameter. While it does not explicitly mention that the full ISO object is returned, that is implied by 'details', and the openWorldHint covers output variability. A small gap but not critical.

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?

The input schema has 100% coverage with its 'id' parameter described as 'ISO ID'. The description reinforces 'by ID' but adds no new semantics beyond the schema. According to guidelines, high coverage yields a baseline of 3.

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 clearly states the verb 'Get details' and the resource 'specific ISO image', distinguishing it from sibling tools like 'hetzner_list_isos' (listing) and other 'get_*' tools for different resources. The qualifier 'by ID' makes the target unambiguous.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives such as 'hetzner_list_isos'. The requirement of an ID is implied but not elaborated, and there are no usage or exclusion statements.

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

hetzner_get_lb_metricsGet Load Balancer MetricsC
Read-onlyIdempotent

Get metrics for a load balancer over a specified time range.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
endYesEnd of the time range in ISO 8601 format
stepNoResolution of metric samples in seconds, e.g. 60
typeYesMetric type, e.g. "open_connections", "connections_per_second", "requests_per_second", "bandwidth.in", "bandwidth.out"
startYesStart of the time range in ISO 8601 format

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, idempotentHint=true, destructiveHint=false, so the safety profile is covered. Beyond that, the description says nothing about rate limits, sample retention windows, what happens with ranges outside retention, or the shape/size of returned series. For a metrics endpoint that can return large time-series payloads, this is a real gap.

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 sentence, front-loaded with the verb and resource, no wasted words. It is terse to the point of being sparse, but nothing is redundant.

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 a time-series-returning tool, the description should indicate the shape of results or at least that raw sample points are returned. Combined with zero usage guidance and no behavioral notes beyond annotations, the definition is too thin for a data-query tool with five parameters.

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 five parameters (id, type, start, end, step) are documented in the schema, including enum-like examples for type and ISO 8601 for timestamps. 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?

The description states a specific verb and resource: 'Get metrics for a load balancer over a specified time range.' It is distinguishable from sibling hetzner_get_server_metrics by naming load balancer explicitly. However, it does not call out that distinction, relying on the name prefix alone.

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 alternatives. There is a sibling hetzner_get_server_metrics for servers, and hetzner_get_load_balancer for LB properties, but the description never states when metrics retrieval is appropriate or what preconditions apply (e.g., LB must exist and have been active to yield samples).

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

hetzner_get_load_balancerGet Load BalancerA
Read-onlyIdempotent

Get details of a specific load balancer by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource 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, destructiveHint=false, idempotentHint=true, so the agent knows this is a safe read. The description adds 'by its ID' which is already in the schema. It does not describe return format or additional behaviors beyond annotations.

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

Conciseness5/5

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

Extremely concise: one sentence front-loaded with the purpose. No redundant or unnecessary words. Every part 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 low complexity (single parameter, no output schema, strong annotations), the description covers the essential: what it does and how. It could mention expected return (load balancer object) but lacking that is 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% with the parameter 'id' described as 'Resource ID'. The description merely says 'by its ID', adding minimal value beyond what the schema already provides. 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 clearly states 'Get details of a specific load balancer by its ID.' The verb 'Get details' and resource 'specific load balancer' are explicit. Among siblings like 'hetzner_list_load_balancers' (list all) and 'hetzner_get_lb_metrics' (metrics only), this distinguishes well.

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-use guidance. The context of sibling names implies use when needing details of one load balancer by ID, but the description does not explain how it differs from list or other get tools, leaving the agent to infer.

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

hetzner_get_locationGet LocationA
Read-onlyIdempotent

Get details of a specific location by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesLocation ID

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. The description does not add behavioral context beyond stating it gets details, which is consistent with annotations.

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

Conciseness5/5

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

One concise sentence that front-loads the key information. No wasted words.

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 simple read-only tool with one parameter and comprehensive annotations, the description is complete enough. No output schema is needed for understanding usage.

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 parameter described as 'Location ID'. The description adds no additional semantic value 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 clearly specifies the verb (Get), resource (location), and how to identify it (by ID). It distinguishes from sibling tools like hetzner_list_locations.

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 implies usage when you have a location ID, but does not explicitly state alternatives or when not to use. However, given the simplicity, it is clear enough.

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

hetzner_get_networkGet NetworkA
Read-onlyIdempotent

Get details of a specific network by its ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource 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 destructiveHint=false, so the description's 'Get' aligns. But it adds no extra behavioral context such as rate limits or error handling. The description is sufficient but not enhanced beyond annotations.

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

Conciseness5/5

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

The description is a single sentence that front-loads the action and resource. No wasted words.

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 get operation with full parameter documentation and good annotations, the description is nearly complete. It does not specify that it returns network details, but the verb 'Get' implies a response object. Slight gap but acceptable.

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 the 'id' parameter. The description only repeats 'by its ID,' adding no new semantics 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 clearly states 'Get details of a specific network by its ID.' It uses a specific verb ('Get') and resource ('network'), and the 'by its ID' distinguishes it from listing tools like hetzner_list_networks.

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 usage when you have a network ID, but does not explicitly exclude alternatives or mention when not to use it. No reference to sibling tools for listing or modification.

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

hetzner_get_placement_groupGet Placement GroupB
Read-onlyIdempotent

Get details of a specific placement group by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPlacement group ID

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, destructiveHint=false, idempotentHint=true. The description adds no extra behavioral context beyond the name, such as what 'details' include or any limitations, adding minimal value.

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?

The description is a single concise sentence, front-loaded with key information, and contains no unnecessary words.

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 get-by-ID tool with good annotations and full schema coverage, the description is adequate but could be improved by specifying that it returns the full placement group object including associated 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 coverage is 100%, with the 'id' parameter described as 'Placement group ID'. The description does not add additional meaning beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

The description clearly states the verb 'Get details' and the resource 'specific placement group by ID', effectively distinguishing from siblings like list_placement_groups (returns all) and create/update/delete.

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 naming convention and context of siblings, but there is no explicit guidance on when to use this tool vs alternatives like list_placement_groups or when not to use it.

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

hetzner_get_pricingGet PricingA
Read-onlyIdempotent

Get current Hetzner Cloud prices, optionally selecting one resource category or traffic prices. Currency and VAT rate are included with filtered results.

ParametersJSON Schema
NameRequiredDescriptionDefault
resourceNoResource category to return; omit for all prices

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds the useful detail that currency and VAT are included with filtered results, but with no output schema it says nothing about the structure of the returned prices, leaving a real gap.

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. 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 one-optional-parameter, read-only pricing lookup with no output schema, the description covers purpose, the optional filter, and one response detail (currency/VAT). It would be fully complete if it hinted at the returned price structure.

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 enum values and the 'omit for all prices' behavior are already documented in the schema. The description only restates that a category can be selected, adding no syntax or meaning beyond it.

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 ('Get') and resource ('Hetzner Cloud prices'), and clarifies it can be scoped to a resource category. No sibling tool deals with pricing, so an agent can unambiguously identify 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?

The description implies usage via 'optionally selecting one resource category or traffic prices,' which maps to how the parameter should be used, but it gives no explicit when-to-use/when-not context or alternatives. Adequate but leaves usage to inference.

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

hetzner_get_primary_ipGet Primary IPB
Read-onlyIdempotent

Get details of a specific primary IP by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPrimary IP ID

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the description carries less burden. However, it adds no extra behavioral context (e.g., what 'details' include, rate limits, or any side effects).

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

Conciseness4/5

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

The description is a single, efficient sentence. It is concise and front-loaded but could be more informative without losing brevity.

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 get-by-ID operation with thorough annotations, the description is adequate. It does not explain the return value, but the tool name and input schema imply a straightforward output. The lack of output schema is not a problem here.

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 fully documents the 'id' parameter. The description adds no new meaning beyond 'by ID', which is implicit in the schema. Baseline 3 is 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?

The description clearly states the action ('Get details'), the resource ('specific primary IP'), and the method ('by ID'). It distinguishes itself from sibling tools like 'hetzner_list_primary_ips' and other get tools for different resources.

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 guidance on when to use this tool versus alternatives (e.g., when to list vs. get). It does not mention when not to use it or any prerequisites, leaving the agent to infer usage from context.

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

hetzner_get_serverGet ServerA
Read-onlyIdempotent

Get details of a specific server by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer 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=true, destructiveHint=false, so the description's additional value is minimal. It does not contradict annotations, but adds little beyond restating the 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?

Single sentence, front-loaded, no wasted words. Perfectly concise for a simple read operation.

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 1-parameter get tool with good annotations, the description is minimally complete. However, it does not explain what 'details' means or hint at the return structure, which could be helpful without an output 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 coverage is 100% with 'id' described as 'Server ID'. Description says 'by ID' which reaffirms schema but adds no new insight. Baseline 3 is 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?

Description clearly states 'Get details of a specific server by ID', using a specific verb and resource. It distinguishes from sibling get_* tools (e.g., get_certificate, get_firewall) by explicitly focusing on 'server'.

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 vs alternatives like hetzner_list_servers or other get_* tools. The description is too terse to provide context for selection.

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

hetzner_get_server_metricsGet Server MetricsA
Read-onlyIdempotent

Retrieve time series metrics (CPU, disk, network) for a server over a time range.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID
endYesEnd of period, ISO 8601 timestamp (e.g. "2025-01-02T00:00:00Z")
stepNoResolution of metric samples in seconds, e.g. 60
typeYesComma-separated metric types: "cpu", "disk", "network"
startYesStart of period, ISO 8601 timestamp (e.g. "2025-01-01T00:00:00Z")

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, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered elsewhere. The description usefully adds that only three metric families are returned and that the result is time-bounded, but says nothing about retention windows, maximum range, sampling defaults, or response size.

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 or repetition. It is well-sized for a read-only retrieval tool, though it is terse enough that a clause about the time-range requirement or output shape would have fit without bloat.

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 metrics-fetch tool with full schema coverage, rich annotations, and no output schema, the description covers the essential what/where/when. Remaining gaps (return format, resolution defaults, retention limits) are real but secondary for an idempotent read 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%, so all five parameters (id, type, start, end, step) are already documented with examples and constraints. The description's mention of CPU/disk/network loosely maps to 'type' and the time range to start/end, but it adds no format or default information 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 ('Retrieve'), resource ('time series metrics'), the metric families (CPU, disk, network), the target (a server), and the temporal scope. It implicitly separates itself from hetzner_get_lb_metrics by saying 'for a server', but never names the sibling, so the distinction 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 Guidelines3/5

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

Usage is implied by the 'for a server over a time range' framing, and an agent can guess this is for reading historical performance data. However, there is no explicit when-to-use/when-not guidance and no signposting toward hetzner_get_lb_metrics as the alternative for load balancers, which is the main risk of mis-selection here.

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

hetzner_get_server_typeGet Server TypeA
Read-onlyIdempotent

Get details of a specific server type, including specs and pricing.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer type 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, destructiveHint=false, idempotentHint=true. The description adds context about return content (specs and pricing) but does not disclose additional behavioral traits beyond annotations. No contradiction.

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

Conciseness5/5

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

Single sentence of 10 words, front-loaded with verb and resource. No fluff or repetition. Efficient and clear.

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?

Simple tool with one parameter and rich annotations. Description covers purpose and return content (specs/pricing). It does not mention how the ID relates to the list tool or provide examples, but is adequate for the tool's simplicity.

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% (parameter 'id' has description 'Server type ID'). The tool description adds no further meaning beyond that. Baseline score of 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 clearly states the tool retrieves details of a specific server type, including specs and pricing. The verb 'Get' and resource 'server type' are explicit. It naturally distinguishes from the sibling 'hetzner_list_server_types' which lists all types, while this fetches 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?

No guidance on when to use this tool versus alternatives like the list tool. The description does not mention prerequisites, use cases, or exclusion criteria. The agent must infer from the tool name and siblings.

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

hetzner_get_ssh_keyGet SSH KeyA
Read-onlyIdempotent

Get details of a specific SSH key by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSSH key ID

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the tool's safety is clear. The description adds 'details' but no additional behavioral traits like rate limits or permissions. With annotations covering safety, a score of 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?

The description is a single, front-loaded sentence with no unnecessary words. It is concise and easy to parse.

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 tool with one parameter and comprehensive annotations, the description provides adequate context. It could mention the return type or common usage, but it is sufficiently 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?

The input schema has 100% coverage with a description for 'id' as 'SSH key ID'. The description repeats 'by ID' but adds no further meaning. Baseline 3 is justified.

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 clearly states the verb 'Get', the resource 'SSH key', and the method 'by ID'. It distinguishes from siblings like 'hetzner_list_ssh_keys' which lists all keys, and 'hetzner_create_ssh_key' which creates a new key.

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 implies usage when you need details of a specific SSH key, but does not explicitly mention when not to use it or reference alternatives. However, the sibling names make the distinction clear, so it is still effective.

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

hetzner_get_storage_boxGet Storage BoxA
Read-onlyIdempotent

Get details of a specific Storage Box by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare the tool as read-only and idempotent; the description adds no extra behavioral context beyond 'Get details'.

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; every part is essential and immediately conveys the tool's purpose.

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 one-parameter, no-output-schema tool, the description is adequate but could be enhanced by listing typical return fields.

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 clear description for 'id'; the description adds no additional meaning beyond restating 'by ID'.

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 uses a specific verb ('Get') and resource ('Storage Box') with identifier ('by ID'), clearly distinguishing it from list operations like 'list_storage_boxes'.

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 you have an ID, but does not explicitly state when to use this tool vs. alternatives like listing, or mention any exclusions.

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

hetzner_get_storage_box_snapshotGet Storage Box SnapshotA
Read-onlyIdempotent

Get details of a specific Storage Box snapshot by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
snapshot_idYesSnapshot ID

TDQS

A3.6/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, openWorldHint. The description adds no behavioral context beyond 'Get details', which is a restatement.

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?

Single sentence, no wasted words, front-loaded with action and resource.

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 strong annotations and no output schema, the description is adequate for a simple get-by-id tool, though 'details' is vague.

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 'id' and 'snapshot_id' described. The description adds 'by ID' but no extra detail beyond what the schema 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 clearly states the verb 'Get', the resource 'Storage Box snapshot', and the method 'by ID'. This distinguishes it from siblings like list and create snapshot tools.

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 usage for retrieving a specific snapshot by ID, but does not explicitly differentiate from list snapshots or provide 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.

hetzner_get_storage_box_subaccountGet Storage Box SubaccountB
Read-onlyIdempotent

Get details of a specific Storage Box subaccount by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
subaccount_idYesSubaccount ID

TDQS

B3.3/5.0
Behavior2/5

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

Annotations already provide readOnlyHint, destructiveHint, and idempotentHint. The description merely restates 'Get details' without adding behavioral context beyond what annotations already convey. No contradictions.

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?

Single sentence that is clear and directly conveys the purpose. No unnecessary words or redundant 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 read-only get tool with comprehensive annotations, the description is minimally adequate. However, it lacks output hints or usage context. With no output schema, additional description of return structure would improve completeness.

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 descriptions already cover both parameters ('Storage Box ID', 'Subaccount ID') at 100% coverage. The tool description adds no extra meaning beyond confirming what parameters are needed. Baseline of 3 is 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?

The description clearly states the verb 'Get', the resource 'Storage Box subaccount', and the identifier 'by ID'. It distinguishes from sibling tools like `hetzner_get_storage_box` and `hetzner_list_storage_box_subaccounts`.

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 `hetzner_list_storage_box_subaccounts`. No prerequisites or exclusions are mentioned.

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

hetzner_get_storage_box_typeGet Storage Box TypeA
Read-onlyIdempotent

Get details of a specific Storage Box type by ID, including capacity and pricing.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box type 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, destructiveHint, idempotentHint, and openWorldHint. The description adds that it includes capacity and pricing, providing some behavioral context beyond annotations, but no additional details on auth, rate limits, or side effects.

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

Conciseness5/5

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

A single sentence of 12 words that is front-loaded with the tool's purpose. Every word is necessary and there is no fluff.

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 tool's simplicity, one parameter, and strong annotations, the description is complete enough. It covers the purpose and return value details. Minor improvement could mention that the ID should come from the list of types.

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 the parameter description 'Storage Box type ID'. The tool description mentions 'by ID' but adds no new semantic meaning beyond what the schema 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 clearly states the verb 'Get', the resource 'details of a specific Storage Box type', the identifier 'by ID', and what is included ('capacity and pricing'). It distinguishes itself from siblings like `hetzner_list_storage_box_types` which lists all types, and `hetzner_get_storage_box` which gets a storage box instance.

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 does not explicitly provide when or when not to use this tool versus alternatives, such as `hetzner_list_storage_box_types`. The usage is implied but not contrasted.

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

hetzner_get_volumeGet VolumeB
Read-onlyIdempotent

Get details of a specific volume by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesVolume ID

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, destructiveHint=false, idempotentHint=true. The description adds no additional behavioral context (e.g., what data is returned, permissions needed, rate limits). It merely restates the purpose already covered by 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?

The description is very concise (one sentence, 8 words), but it could be slightly expanded (e.g., mentioning return value format) without losing conciseness. Still well-structured and front-loaded.

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?

Given the simplicity (one parameter, no output schema), the description is adequate but vague. It does not specify what 'details' includes, and with no output schema, the agent may need more context. Sibling tools exist but no differentiation is explicitly 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?

The schema covers 100% of parameters with descriptions; the 'id' parameter is clearly described in the schema. The tool description adds no extra meaning beyond 'by ID'. Baseline score of 3 is 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?

The description clearly states the action ('Get details') and the resource ('a specific volume by ID'), distinguishing it from sibling tools like list_volumes, create_volume, etc. The verb and resource are explicit and specific.

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 needing details of a single volume, but lacks explicit guidance on when to use this versus alternatives like hetzner_list_volumes. No when-not or prerequisite information is provided.

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

hetzner_get_zoneGet DNS ZoneA
Read-onlyIdempotent

Get details of a specific DNS zone by its numeric ID or zone name (e.g. "example.com").

ParametersJSON Schema
NameRequiredDescriptionDefault
id_or_nameYesZone ID or name

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already indicate read-only, non-destructive, idempotent behavior. Description adds that it accepts ID or name, but does not disclose any other behavioral traits beyond schema and 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?

Single, front-loaded sentence with no wasted words. Efficient and direct.

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 simple tool with one parameter and no output schema, the description fully covers the purpose and parameter semantics. No missing information given the low complexity.

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 already covers the parameter with anyOf and description. The description adds clarity by explicitly stating 'numeric ID or zone name' and providing an example, adding value beyond 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?

Clearly states it retrieves details of a DNS zone, specifies identification by numeric ID or zone name, and distinguishes from sibling tools like list or record-specific tools.

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 describes when to use (to get zone details) and provides an example input, but does not mention when not to use or compare with alternative tools like list_zones.

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

hetzner_get_zone_rrsetGet DNS Zone RRSetA
Read-onlyIdempotent

Get a specific RRSet by zone, name, and record type.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRRSet name (e.g. "@", "www", "_acme-challenge")
typeYesDNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)
id_or_nameYesZone ID or name

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety behavior is covered. The description adds the useful scoping fact that the result is a single RRSet selected by zone/name/type, but does not disclose behavior such as missing-record handling or the content of the returned RRSet. No contradiction; moderate value beyond annotations.

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

Conciseness5/5

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

A single sentence, front-loaded with the action and resource, with no filler. Every word contributes directly to understanding what the tool does and how it selects the target.

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 full schema coverage for all three required parameters and annotations that define the operation as read-only, idempotent, and non-destructive, the description is sufficient for correct invocation. It could briefly note that the response is the RRSet itself, but this is not an invocation-critical gap given the tool name and siblings.

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 meaningful per-parameter descriptions including examples, enum values, and id format constraints. The description adds no meaning beyond the schema's parameter documentation; it merely restates the three selection keys at a high level.

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 (Get), a specific resource (RRSet), and the exact keys used to identify it (zone, name, record type). The word 'specific' distinguishes it from listing all RRSets, and the tool name and title align cleanly with the action.

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 'a specific RRSet' implies this tool is for single-record-set lookups rather than listing all RRSets, but the description never explicitly says when to use this versus list_zone_rrsets or the RRSet mutation tools. Usage context is only implied, not clarified with alternatives or exclusions.

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

hetzner_import_zonefileImport DNS ZonefileA
Destructive

Replace the contents of a DNS zone with the given RFC 1035 zonefile. This overwrites all existing RRSets.

ParametersJSON Schema
NameRequiredDescriptionDefault
zonefileYesFull zone content in RFC 1035 zonefile format
id_or_nameYesZone ID or name

TDQS

A3.8/5.0
Behavior3/5

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

The description adds that the tool overwrites all existing RRSets, which provides some behavioral context beyond the destructiveHint annotation. However, it does not clarify whether other zone settings (e.g., TTL, nameservers) are affected, leaving some behavioral ambiguity.

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 are efficient and front-loaded: the first states the core action, the second adds a critical behavioral note. No extraneous text.

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 straightforward import operation, the description covers the essential action and effect. Annotations provide safety profile. Lacking return value explanation, but no output schema exists; overall 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?

Both parameters have descriptions in the input schema (100% coverage). The description adds no additional semantic information beyond what the schema already provides. Baseline 3 is 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?

The description clearly states the tool replaces the contents of a DNS zone using a zonefile, explicitly mentioning it overwrites all existing RRSets. This distinguishes it from sibling tools like hetzner_export_zonefile or hetzner_create_zone.

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 explains what the tool does but provides no explicit guidance on when to use it versus alternatives, nor does it mention prerequisites or when not to use it. The context is clear but lacks usage direction.

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

hetzner_list_certificate_actionsList Certificate ActionsB
Read-onlyIdempotent

List all actions performed on a specific certificate, such as issuance and renewal retries.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCertificate ID
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
statusNoFilter by action status: "running", "success", or "error"; pass an array for multiple statuses
per_pageNoResults per page (max 50)

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, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description only adds that the actions include issuance and renewal retries; it says nothing about pagination, ordering, or volume of results.

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 well-formed sentence that front-loads the core purpose with no filler. It is appropriately sized, though it could carry slightly more routing or behavioral content without becoming bloated.

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 paginated list tool whose annotations cover safety and whose schema documents all parameters, the description is minimally sufficient. It omits pagination behavior and result ordering, and there is no output schema, so an agent gets little beyond the structured fields.

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 five parameters (id, page, sort, status, per_page) are already documented in the schema. The description adds no syntax, format, or filtering 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?

States a specific verb (list) and resource (actions on a specific certificate), and the examples 'issuance and renewal retries' clarify the action domain. It distinguishes the resource from sibling tools like hetzner_list_certificates and hetzner_get_certificate, though it does not explicitly name a 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?

The description never states when to use this tool versus alternatives, nor conditions or prerequisites. It does not point to related siblings such as hetzner_retry_certificate or hetzner_get_certificate, leaving usage entirely to inference from the name.

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

hetzner_list_certificatesList CertificatesA
Read-onlyIdempotent

List all SSL/TLS certificates in the project, with optional filtering.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by name
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
typeNoFilter by certificate type
per_pageNoResults per page (max 50)
label_selectorNoLabel filter, e.g. "env=prod,tier=web"

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, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered. The description only adds the 'in the project' scope; it says nothing about pagination behavior or result ordering beyond what the schema fields 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?

A single short sentence with zero filler, front-loading the verb, resource, scope, and the filtering capability. Nothing in it is redundant or 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 read-only list tool with full schema coverage, no output schema, and complete annotations, the description is essentially sufficient. It could mention that results are paginated or that all fields are optional, but no critical gap prevents 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 description coverage is 100% – name, type enum, sort syntax, label_selector format, page and per_page are all documented in the schema. The description adds no parameter detail beyond 'optional filtering', 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+resource (list SSL/TLS certificates) and scopes it to the project, which is clearly distinct from the sibling hetzner_get_certificate and hetzner_list_certificate_actions. It does not explicitly name a sibling to differentiate from, 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 phrase 'with optional filtering' implies the tool can be narrowed but provides no when-to-use guidance, no prerequisites, and no routing to alternatives such as hetzner_get_certificate for a single cert. 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.

hetzner_list_firewall_actionsList Firewall ActionsA
Read-onlyIdempotent

List all actions performed on a specific firewall, such as rule and resource attachment changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesFirewall ID
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
statusNoFilter by action status: "running", "success", or "error"; pass an array for multiple statuses
per_pageNoResults per page (max 50)

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, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered structurally. The description adds the useful framing that these are historical actions like rule and attachment changes, but says nothing about pagination behavior or ordering beyond what the schema already exposes.

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 scope front-loaded and zero filler. It is appropriately sized, though the illustrative clause is the only content beyond what name/title already convey.

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 paginated list tool with full schema coverage and annotations covering safety, the description is adequate; the absence of an output schema means return values need not be explained. Minor remaining gap is that 'actions' contents are only illustrated, not described.

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, page, sort, status, and per_page, including examples and the max-50 limit. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.

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

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 (firewall actions) scoped to a specific firewall, and gives examples of what an action is (rule and resource attachment changes). It is clearly distinguishable from read/get/update siblings, though it does not explicitly name or contrast against the many other list_*_actions 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 phrase 'for a specific firewall' implies the required context (needs a firewall id) and the tool's niche, but there is no explicit when-to-use vs when-not, no mention of alternatives such as hetzner_get_firewall, and no preconditions. Usage is implied rather than guided.

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

hetzner_list_firewallsList FirewallsA
Read-onlyIdempotent

List all firewalls in the project, with optional filtering by name or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by name
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
per_pageNoResults per page (max 50)
label_selectorNoLabel filter, e.g. "env=prod,tier=web"

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, idempotentHint=true, and destructiveHint=false, so safety and idempotency are covered. The description adds that filtering is optional, but does not disclose pagination behavior, return format, or rate limits, which would be valuable beyond annotations.

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

Conciseness5/5

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

A single, well-structured sentence that front-loads the core action and immediately notes optional filtering. No wasted words.

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?

Given no output schema and only annotations covering safety, the description should ideally mention that results are paginated or how to handle large lists. It is adequate for a simple list operation but leaves gaps in behavioral context beyond safety annotations.

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 all five parameters (name, page, sort, per_page, label_selector). The description only mentions name and labels filtering, adding no new semantic detail beyond the schema; baseline 3 is appropriate.

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

Purpose4/5

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

The description states a specific verb (List) and resource (firewalls) scoped to the project. It distinguishes itself from siblings like hetzner_get_firewall (singular, retrieve one) by being the collection listing, though it doesn't explicitly name the alternative.

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 mentions optional filtering by name or labels, which implicitly guides usage. However, there is no explicit when-to-use or when-not-to-use guidance, nor does it name alternatives like hetzner_get_firewall for single retrieval.

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

hetzner_list_floating_ip_actionsList Floating IP ActionsB
Read-onlyIdempotent

List all actions performed on a specific floating IP, such as assign, unassign, and rDNS changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesFloating IP ID
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
statusNoFilter by action status: "running", "success", or "error"; pass an array for multiple statuses
per_pageNoResults per page (max 50)

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, idempotentHint=true and destructiveHint=false, so the safety profile is fully covered and the description carries a lower burden. The description adds that this is a historical action log and lists example action types, which is genuinely useful context. It does not mention pagination or result ordering, which are relevant given the page/per_page params.

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 well-formed sentence with no wasted words, and the core purpose is front-loaded. The concrete action examples add clarity without bloat.

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 paginated read-only list tool whose annotations and full schema coverage already carry the safety and parameter burden, the description is nearly complete. It would be improved by noting pagination behavior, but nothing essential to invoking it correctly is missing.

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

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, page, per_page, sort, and status including enum-like values for status. The description adds no parameter semantics beyond what the schema provides; 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 (list) and resource (actions on a specific floating IP), then enumerates the kinds of actions (assign, unassign, rDNS changes). This distinguishes it from the sibling hetzner_list_floating_ips, which lists the IPs themselves rather than their history. It stops short of naming a sibling explicitly, so it lands just under 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?

No guidance on when to use this tool versus alternatives such as hetzner_list_floating_ips or hetzner_get_floating_ip, and no stated prerequisites (e.g. that the floating IP id must already be known). Usage is only implied by the description. No exclusions or conditions are given.

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

hetzner_list_floating_ipsList Floating IPsA
Read-onlyIdempotent

List all floating IPs in the project, with optional filtering by name or label.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by floating IP name
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
per_pageNoResults per page (max 50)
label_selectorNoLabel filter, e.g. "env=prod,tier=web"

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, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety profile is covered. The description adds the filterable fields but says nothing about pagination behavior, result caps, or default sort, which matters for a list endpoint with page/per_page params.

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 core action first and the optional filtering clause second. No wasted words.

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?

Adequate for a filtered list tool: annotations carry the safety profile and the schema documents all params. The main gap is lack of any note on pagination defaults (per_page max 50) or return shape, though absence of an output schema makes the latter expected.

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 five parameters are already documented. The description restates the name/label filtering at a high level and adds no syntax or format detail beyond the schema. Baseline 3 applies.

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

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 (floating IPs) scoped to the project, and notes the optional name/label filtering. It implicitly contrasts with hetzner_get_floating_ip via "all", but never names a sibling explicitly.

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

Usage Guidelines3/5

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

Usage is implied: enumerate floating IPs, optionally filtered. There is no explicit when-to-use/when-not guidance or reference to alternatives such as hetzner_get_floating_ip for a single IP.

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

hetzner_list_image_actionsList Image ActionsB
Read-onlyIdempotent

List all actions performed on a specific image, such as snapshot creation and protection changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesImage ID
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
statusNoFilter by action status: "running", "success", or "error"; pass an array for multiple statuses
per_pageNoResults per page (max 50)

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnly=true, idempotent=true, and destructive=false, so the safety profile is fully covered. The description adds useful content context (snapshot creation, protection changes) but says nothing about pagination behavior or the shape of a returned 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?

A single tight sentence with the verb and resource front-loaded and zero filler. Every clause 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?

With no output schema, the description carries some burden to characterize returns; it partly does via example action types but omits what an action record contains and any note on pagination. For a 5-param filtered-list tool this is adequate but not complete.

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

Parameters3/5

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

Schema description coverage is 100%, so all five parameters (id, page, sort, status, per_page) are already documented in the schema. The description adds no syntax or format detail beyond that, so the baseline 3 applies.

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

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 (actions performed on a specific image) and even names example action types. This clearly distinguishes it from sibling action-list tools like list_server_actions and list_volume_actions by the resource scoped.

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 related tools such as get_image or other *_actions lists. It implicitly signals 'use to inspect image history' but states no conditions, prerequisites, or alternatives.

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

hetzner_list_imagesList ImagesB
Read-onlyIdempotent

List all available images, including system, snapshot, and backup images.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by image name
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
typeNoFilter by image type
statusNoFilter by image status
bound_toNoFilter backup images by linked server ID; pass an array for multiple servers
per_pageNoResults per page (max 50)
architectureNoFilter by CPU architecture
label_selectorNoLabel filter, e.g. "env=prod,tier=web"
include_deprecatedNoWhether to include deprecated images

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, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered. The description adds only that multiple image categories are included; it says nothing about pagination defaults, result caps, or filtering behavior beyond 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 efficient sentence with no filler. Front-loads the operation, though it could be trimmed or extended with marginal cost.

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 list tool with full schema coverage and annotations, the description is minimally sufficient. It does not mention pagination behavior or result shape, but with no output schema and a fully documented parameter set, the gap is 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 description coverage is 100% with per-parameter descriptions and enums for type, status, and architecture, so the schema carries parameter semantics. The description adds no additional meaning about how filters combine or paginate, 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 ('List') and resource ('images') plus the range of image kinds covered (system, snapshot, backup). It is clear what the tool does, though it does not explicitly distinguish itself from the singular sibling hetzner_get_image.

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 guidance on when to use this versus alternatives such as hetzner_get_image (single image) or hetzner_list_image_actions. The list-vs-get distinction is only implicitly inferable from the name.

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

hetzner_list_isosList ISOsB
Read-onlyIdempotent

List all available ISO images for mounting on servers.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by ISO name
pageNoPage number
per_pageNoResults per page (max 50)
architectureNoFilter by CPU architecture

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, idempotentHint=true, and destructiveHint=false, which cover the tool's safety profile. The description adds that it lists 'all' ISOs, implying no default filters, but does not discuss pagination behavior (though schema has page/per_page). This adds minimal value beyond annotations.

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

Conciseness5/5

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

The description is a single short sentence with no fluff, efficiently stating the purpose. It is front-loaded and earns its place.

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?

Given that the schema fully documents parameters and annotations cover safety, the description is minimally adequate. However, it does not explain the return format or response structure (no output schema), which could be useful for an 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%, with each parameter having a description. The tool description 'List all available ISO images' adds no additional meaning to the parameters 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?

The description clearly states 'List all available ISO images', specifying the verb (list) and resource (ISO images). It also adds context 'for mounting on servers', but does not explicitly distinguish from sibling 'hetzner_get_iso' which gets a single ISO.

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 mentions 'for mounting on servers' hinting at use case but provides no explicit guidance on when to use this tool versus alternatives, nor any when-not-to-use conditions.

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

hetzner_list_lb_typesList Load Balancer TypesA
Read-onlyIdempotent

List all available load balancer types with pricing and limits.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by type name
pageNoPage number
per_pageNoResults per page (max 50)

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 destructiveHint=false, covering safety. The description adds that the tool returns 'pricing and limits,' which is useful context beyond the schema. However, it does not disclose pagination behavior or response structure, which would enhance 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?

The description is a single sentence that efficiently states the purpose and key data returned. No unnecessary words, and the most important information 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?

Given no output schema, the description mentions 'pricing and limits' which partially compensates. However, it could more completely describe the response structure (e.g., included fields like id, name, etc.). Still, it is adequate for a simple list tool with well-annotated parameters.

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 clear descriptions for 'name', 'page', and 'per_page'. The description adds no additional meaning to these parameters beyond what the schema provides, so baseline score 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 states 'List all available load balancer types with pricing and limits,' which clearly identifies the action (list), resource (load balancer types), and added value (pricing and limits). This distinguishes it from sibling tools like hetzner_list_load_balancers that list actual load balancers.

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 does not explicitly provide when to use this tool versus alternatives like hetzner_list_load_balancers or hetzner_get_load_balancer. It implies a read-only exploratory purpose but lacks explicit guidance or exclusions.

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

hetzner_list_load_balancer_actionsList Load Balancer ActionsA
Read-onlyIdempotent

List all actions performed on a specific load balancer, such as service changes and target attachments.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesLoad Balancer ID
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
statusNoFilter by action status: "running", "success", or "error"; pass an array for multiple statuses
per_pageNoResults per page (max 50)

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, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful context about what kinds of actions appear (service changes, target attachments), but does not disclose pagination behavior, filtering semantics, or authentication 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?

The description is a single, well-formed sentence that front-loads the core purpose and includes a brief clarifying example. There is no redundant or wasted text.

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 full schema coverage and rich annotations, the description is largely complete for a simple read-only list endpoint. It lacks any mention of return format or pagination, but with no output schema and a straightforward listing operation, 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 description coverage is 100%, so all five parameters (id, page, sort, status, per_page) are already documented in the input schema. The description adds no additional parameter meaning or constraints, which is acceptable 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?

The description states a specific verb ('List') and resource ('actions performed on a specific load balancer') and gives examples of action types. It clearly distinguishes this from sibling list-action tools for servers, networks, volumes, etc., because the resource is explicitly a load balancer.

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 the tool is for listing load balancer actions, but it does not explicitly state when to use it versus alternatives such as get_load_balancer, list_load_balancers, or wait_for_action. No exclusions or conditions are provided, leaving usage context to inference.

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

hetzner_list_load_balancersList Load BalancersA
Read-onlyIdempotent

List all load balancers in the project, with optional filtering by name or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by name
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
per_pageNoResults per page (max 50)
label_selectorNoLabel filter, e.g. "env=prod,tier=web"

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, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is fully covered by structured data. The description only adds the project-scope and filtering note; it says nothing about pagination defaults or result ordering beyond what the schema states.

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 that names the verb, resource, scope, and filter options with zero wasted words.

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 full annotation coverage, 100% schema documentation, and no output schema, the description is nearly complete. Minor gap: no mention of pagination behavior, though the schema supplies page/per_page.

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 five parameters (name, page, sort, per_page, label_selector) are already documented in the schema. The description restates name/label filtering but adds no syntax or format detail beyond the schema's own examples.

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 ('load balancers') with the project scope and the filterable fields. It is clearly distinguishable from the get/create/update/delete siblings by the 'List all' framing, though it does not name a sibling to route against.

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 ('optional filtering by name or labels' hints at when to filter), but there is no explicit when-to-use, when-not-to-use, or alternative (e.g. hetzner_get_load_balancer for a single LB) mentioned.

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

hetzner_list_locationsList LocationsA
Read-onlyIdempotent

List all available Hetzner Cloud locations (regions).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by location name
pageNoPage number
per_pageNoResults per page (max 50)

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, destructiveHint, idempotentHint, and openWorldHint. Description adds 'all available' aligning with openWorldHint. Does not contradict 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?

Single sentence, no wasted words. Front-loaded with essential 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?

Given annotations and complete schema, the description is sufficient for this simple list operation. No output schema needed.

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 covers all three parameters with descriptions (100% coverage). Description does not add further semantic meaning 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?

Clearly states 'list all available Hetzner Cloud locations (regions)', using specific verb and resource. Distinguishes from sibling `hetzner_get_location` which retrieves a single location.

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?

Purpose is clear but lacks explicit guidance on when to use this tool vs alternatives like `get_location`. No exclusions or when-not-to-use advice provided.

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

hetzner_list_network_actionsList Network ActionsA
Read-onlyIdempotent

List all actions performed on a specific network, such as subnet and route changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNetwork ID
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
statusNoFilter by action status: "running", "success", or "error"; pass an array for multiple statuses
per_pageNoResults per page (max 50)

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and open-world behavior, so the safety profile is covered. The description adds useful context about the kinds of actions returned (subnet and route changes) but omits pagination, ordering, or retention behavior that could matter to an agent.

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

Conciseness5/5

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

A single efficient sentence that front-loads the verb and resource. Every word earns its place 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?

With annotations covering the safety profile and the schema fully documenting parameters, the description only needs to clarify purpose and scope, which it does. No output schema exists, so return-value explanation is not required. It is nearly complete, lacking only minor details like pagination behavior.

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 five parameters (id, page, sort, status, per_page) are fully documented in the schema. The description adds no additional parameter semantics beyond identifying the network scope, so 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 states a specific verb ('List') and resource ('actions performed on a specific network') and gives concrete examples ('subnet and route changes'). It implicitly differentiates from sibling action-list tools by scoping to network, though it does not name 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?

Usage is implied by the purpose (view the action history for a network), but there is no explicit when-to-use, when-not-to-use, or alternative-tool guidance. It does not mention prerequisites like needing a valid network ID.

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

hetzner_list_network_membersList Network MembersA
Read-onlyIdempotent

List resources attached to a network, with their subnet, IP addresses, and attachment status. Filter by resource type, subnet, or status.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesNetwork ID
pageNoPage number
sortNoSort by id, type, status, or ip, e.g. "id:asc"; pass an array for multiple fields
typeNoResource type filter; pass an array for multiple types
statusNoAttachment status filter; pass an array for multiple statuses
subnetNoSubnet IP range in CIDR notation; pass an array for multiple subnets
per_pageNoResults per page (max 50)

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, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds what the result contains (subnet, IPs, status), but says nothing about pagination behavior or rate limits beyond what the per_page parameter implies.

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 no filler. The core action and return contents are front-loaded ahead of the filter clause, so an agent gets the essentials immediately.

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 naming the returned fields, and annotations cover the safety profile. It is nearly complete for a read-only list tool, missing only pagination or default-count 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 every parameter is already documented in the schema. The description's mention of filtering by type, subnet, and status maps to existing parameters but adds no syntax or format details beyond the schema. 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.

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 resources attached to a network') and even enumerates the returned fields (subnet, IP addresses, attachment status). This clearly distinguishes it from hetzner_list_networks and hetzner_get_network by focusing on members rather than the network itself, though it does not explicitly name 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?

The second sentence ('Filter by resource type, subnet, or status') gives practical usage context for narrowing results, which is implied guidance. However, it never states when to choose this tool over alternatives like hetzner_get_network or hetzner_list_networks, nor any prerequisites.

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

hetzner_list_networksList NetworksB
Read-onlyIdempotent

List all networks in the project, with optional filtering by name or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by name
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
per_pageNoResults per page (max 50)
label_selectorNoLabel filter, e.g. "env=prod,tier=web"

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, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds that filtering is optional, but says nothing about pagination defaults, result limits, or project scoping beyond what annotations carry.

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. It is efficient, though arguably under-specified for a paginated list tool rather than genuinely 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?

With rich annotations and a fully documented schema, the description does not need to explain parameters or return values. However, it omits any mention of pagination behavior, which matters for a list endpoint with page/per_page parameters.

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 name, page, per_page, sort and label_selector. The description restates name and label filtering but adds no syntax, defaults, or interaction 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 ('List all networks in the project') and notes the filter dimensions. It is distinguishable from hetzner_get_network and hetzner_create_network by the verb alone, though it does not name the sibling list tools (e.g. hetzner_list_network_members) it could be confused with.

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 when-to-use guidance and never points to alternatives such as hetzner_get_network for a single network or hetzner_list_network_members for membership. Usage is only implied by the verb 'List'.

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

hetzner_list_placement_groupsList Placement GroupsC
Read-onlyIdempotent

List all placement groups in the project.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by placement group name
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
per_pageNoResults per page (max 50)
label_selectorNoLabel filter, e.g. "env=prod,tier=web"

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, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds only the project scoping phrase and says nothing about pagination behavior, result ordering, or empty-result cases, so it contributes almost nothing 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 short sentence with zero redundancy, and the verb-resource pair is front-loaded. It is efficient but arguably too terse for a tool with five optional query parameters, leaving the agent with no navigational 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 plain list endpoint with a fully documented schema and a complete read-only annotation set, the description is minimally sufficient to invoke the tool. However, with no output schema present, it should note the paginated result shape or that filtered listing is supported, which it never does.

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 name, page, sort, per_page and label_selector each documented including examples and caps, so the baseline of 3 applies. The description references none of the filtering or pagination capabilities, adding no meaning 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 clear verb (List) and resource (placement groups) with a scope qualifier (in the project). It is unambiguous on its own, though it never distinguishes itself from siblings like hetzner_get_placement_group or hetzner_list_servers.

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 is given: nothing says to use this rather than hetzner_get_placement_group for a single group, nor that the five optional filter/pagination parameters are the intended refinement path. The agent must infer all usage context from the name.

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

hetzner_list_primary_ip_actionsList Primary IP ActionsA
Read-onlyIdempotent

List all actions performed on a specific primary IP, such as assign, unassign, and rDNS changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPrimary IP ID
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
statusNoFilter by action status: "running", "success", or "error"; pass an array for multiple statuses
per_pageNoResults per page (max 50)

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, idempotentHint=true, destructiveHint=false, so the safety profile is covered. The description adds which action types appear in the results, which is useful context, but says nothing about pagination behavior or result retention beyond what the schema already shows.

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 resource and scope come first, followed by concrete action examples. 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 ideally would hint at the shape of returned action records, but it only names examples. Combined with the lack of pagination notes, it is adequate but has clear gaps for an agent interpreting results.

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, page, sort, status, and per_page. The description only adds that the id must refer to a primary IP, which is marginal over the schema's own 'Primary IP ID'. 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?

Clear specific verb+resource: lists actions performed on a specific primary IP, with concrete action examples (assign, unassign, rDNS changes). It doesn't explicitly distinguish itself from sibling list tools like hetzner_list_primary_ips or the other *_actions lister tools, but the purpose 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 (audit/history of actions scoped to one primary IP via the required id), but there is no explicit when-to-use guidance, no mention of the alternative listers (e.g. list_primary_ips for the IPs themselves), and no note about pagination or result limits despite page/per_page params.

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

hetzner_list_primary_ipsList Primary IPsB
Read-onlyIdempotent

List all primary IPs in the project, with optional filtering by name, label, or IP address.

ParametersJSON Schema
NameRequiredDescriptionDefault
ipNoFilter by IP address
nameNoFilter by primary IP name
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
per_pageNoResults per page (max 50)
label_selectorNoLabel filter, e.g. "env=prod,tier=web"

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, idempotentHint=true, openWorldHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds the project-scoped, filterable nature of the read, but says nothing about pagination behavior (page/per_page) or result ordering, which is where an agent would still need orientation.

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 well-formed sentence that front-loads the core action and appends the filtering capability. It is efficient and free of filler, though it could be structured to separate the base behavior from the optional filters.

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 six optional parameters, no output schema, and full annotation coverage, the description is minimally adequate: it covers scope and filters but omits the pagination/sorting defaults that matter for a paged list endpoint. An agent could call it correctly but would learn pagination behavior only from 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%, so all six parameters including ip, name, label_selector, sort, page, and per_page are already documented in the schema. The description merely restates a subset of the filter fields (name, label, IP) without adding syntax or default-value information 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 verb (list) and resource (primary IPs) and scopes it to the project, which cleanly separates it from hetzner_get_primary_ip and hetzner_list_primary_ip_actions. It stops short of naming those siblings explicitly, so an agent must infer the distinction from the list/get naming convention.

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 'with optional filtering by name, label, or IP address' implies the typical when-to-use scenario, but there is no explicit guidance on when to prefer this tool over hetzner_get_primary_ip or the related action-listing tool. No prerequisites or pagination-context guidance are given.

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

hetzner_list_server_actionsList Server ActionsB
Read-onlyIdempotent

List all actions for a specific server, such as power changes and rebuilds.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
statusNoFilter by action status: "running", "success", or "error"; pass an array for multiple statuses
per_pageNoResults per page (max 50)

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds only the example action types; it does not say whether results are a historical log, how far back they go, or that the list is paginated.

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 resource and scope front-loaded; nothing redundant. It is arguably a touch thin for a five-parameter paginated lister, but it wastes no words.

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 hinting at what comes back, yet it only names example action types and omits pagination, filtering behaviour, and the relationship to wait_for_action. Adequate for a simple read lister but with visible 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 id, page, sort, status and per_page are already documented in the schema (including sort syntax and status enum values). 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 (list) and resource (actions) scoped to a specific server, and gives concrete examples ('power changes and rebuilds'). This scoping implicitly separates it from sibling listers like hetzner_list_network_actions and hetzner_list_load_balancer_actions, though it never names them explicitly.

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

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 exclusions, and no mention of related tools such as hetzner_wait_for_action (which polls a single action) or hetzner_get_server. 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.

hetzner_list_serversList ServersB
Read-onlyIdempotent

List all servers in the project, with optional filtering by name, label, or status.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by server name
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
statusNoFilter by server status
per_pageNoResults per page (max 50)
label_selectorNoLabel filter, e.g. "env=prod,tier=web"

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, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is fully covered elsewhere. The description adds no behavioral context beyond that—nothing about pagination behavior, result limits (per_page max 50), or default 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 well-formed sentence that front-loads the action and resource before the optional modifiers. No wasted words, though it is thin for a six-parameter 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 simple read-only list tool with full annotation coverage and no output schema, the description is adequate but omits pagination behavior and default sort, which matter for an agent consuming a paginated 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 the baseline is 3. The description names name/label/status filters, which maps to some parameters, but says nothing about page, per_page, or sort, and adds no syntax 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 ('List all servers in the project') and adds scope via the filtering note. It is distinguishable from the many write-oriented siblings like hetzner_create_server or hetzner_update_server, though it does not explicitly name a sibling such as hetzner_get_server.

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 listing intent implies when to use it (enumerate servers rather than fetch one), but there is no explicit guidance on when to prefer hetzner_get_server, nor any note about pagination limits or when filtering is preferable to client-side filtering.

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

hetzner_list_server_typesList Server TypesB
Read-onlyIdempotent

List server types with specs, pricing, and per-location availability and recommendations.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by server type name
pageNoPage number
per_pageNoResults per page (max 50)

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, idempotentHint=true, destructiveHint=false and openWorldHint=true, covering the safety profile. The description adds only the content shape (specs, pricing, availability, recommendations), with no auth, rate-limit, or pagination behavior 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.

Conciseness4/5

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

A single front-loaded sentence that opens with the verb and resource and adds the return-content summary without filler. It is appropriately sized for a simple list endpoint, though it packs multiple content clauses into one sentence.

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 three optional params and no output schema, the description tells the agent what data comes back (specs, pricing, availability, recommendations). The main gap, selection guidance relative to sibling tools, is handled in the usage dimension.

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 three optional parameters (name filter, page, per_page), so the schema already carries the semantics. The description does not add format or constraint detail (e.g., the per_page max of 50), 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 ('List') and resource ('server types') and enumerates the payload (specs, pricing, per-location availability, recommendations). It implicitly distinguishes itself from the singular sibling hetzner_get_server_type, but never names or routes away from an alternative, 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?

The description offers no when-to-use, prerequisites, or alternative tools. An agent gets only what the tool returns, not when it should be selected over hetzner_get_server_type or hetzner_list_locations.

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

hetzner_list_ssh_keysList SSH KeysA
Read-onlyIdempotent

List all SSH keys in the project, with optional filtering by name, label, or fingerprint.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by SSH key name
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
per_pageNoResults per page (max 50)
fingerprintNoFilter by SSH key fingerprint
label_selectorNoLabel filter, e.g. "env=prod,tier=web"

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, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered elsewhere. The description adds only the filtering dimension and does not describe pagination behavior or result ordering, so it contributes modest extra 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 zero padding; the scope (project) comes first and the filtering capability follows. 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 simple paginated list tool with full annotation coverage and 100% schema documentation, the description is essentially complete. It could note pagination or sort defaults, but there is no output schema to explain and 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%, so all six parameters (name, page, sort, per_page, fingerprint, label_selector) are already documented. The description restates the filterable fields (name, label, fingerprint) but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (List) and resource (SSH keys) scoped to the project, plus the available filters. This is trivially distinguishable from the sibling hetzner_get_ssh_key (single key) and the create/update/delete 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?

Usage is implied by the name and description (enumerate keys, optionally filtered), but there is no explicit when-to-use guidance or mention of why one would choose this over hetzner_get_ssh_key. No exclusions or prerequisites are stated.

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

hetzner_list_storage_box_actionsList Storage Box ActionsA
Read-onlyIdempotent

List all actions performed on a specific Storage Box, such as type changes and password resets.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
statusNoFilter by action status: "running", "success", or "error"; pass an array for multiple statuses
per_pageNoResults per page (max 50)

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, idempotentHint=true, and destructiveHint=false, so the safety profile is covered structurally. The description adds the useful context that the log contains mutating events (type changes, password resets) previously performed on the box, but says nothing about pagination behavior, result ordering, or how far back history goes.

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 well-formed sentence that front-loads the verb and resource with zero filler. Nothing in it is redundant or 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 read-only paginated list tool with fully documented schema parameters and covering annotations, the description gives enough to call it correctly. It does not need to explain return values since the shape is a standard action list, though it could note that results are paginated and filterable by status.

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 five parameters (id, page, sort, status, per_page) are already documented in the schema, including the enum-like status values. The description adds no additional meaning about the required id or the filtering/sorting options, 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 ("List") and resource ("actions performed on a specific Storage Box"), and the phrase "on a specific Storage Box" separates it from the many sibling action-listing tools such as hetzner_list_server_actions and hetzner_list_zone_actions. The examples "type changes and password resets" concretize what kind of records are returned.

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 does but never says when to reach for it versus alternatives like hetzner_get_storage_box, hetzner_list_storage_boxes, or hetzner_wait_for_action. No prerequisites, no when-not conditions, no mention of the sibling action-listing pattern it belongs to.

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

hetzner_list_storage_boxesList Storage BoxesB
Read-onlyIdempotent

List all Storage Boxes in the project, with optional filtering by name or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by name
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
per_pageNoResults per page (max 50)
label_selectorNoLabel filter, e.g. "env=prod,tier=web"

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, openWorld). The description adds the project-scoping constraint, which is useful context. But it doesn't mention pagination behavior, default sort, or result limits despite three params controlling those.

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?

Single sentence, front-loaded with the operation and resource, then the optional refinement. No waste.

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?

Read-only list tool with annotations covering safety and schema covering all params, so the essentials are present. However, pagination is a central concern for a list tool (max 50 per page) and the description never signals that results are paginated, leaving the agent to infer it 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 documents all five params including name, label_selector, page, per_page, and sort with examples. The description's mention of filtering adds no detail beyond what the schema provides. 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 all Storage Boxes') and adds scope ('in the project') plus filtering capability. Distinguishable from siblings like hetzner_get_storage_box (singular) and hetzner_list_storage_box_types, but doesn't explicitly name 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?

Mentions that filtering is optional but provides no when-to-use context, no guidance on choosing between name vs label_selector filtering, and no routing to sibling tools (e.g., use get_storage_box for a single box).

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

hetzner_list_storage_box_foldersList Storage Box FoldersA
Read-onlyIdempotent

List the folders inside a Storage Box, optionally under a given path.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
pathNoDirectory path to list folders under (defaults to the root)

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, which cover behavioral safety. The description simply states the action without adding new behavioral context (e.g., no pagination details or path validation behavior). Annotations carry the transparency burden sufficiently.

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 11-word sentence that is perfectly concise and front-loaded with the core action. No redundant or extraneous 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?

Given the low complexity (2 parameters, 100% schema coverage, good annotations, no output schema), the description adequately covers the tool's purpose and optional path filtering. No additional context is necessary.

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 described in the schema (100% coverage). The description adds no additional semantic information beyond what the schema already provides, so baseline 3 is 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?

Description clearly states verb 'list', resource 'folders inside a Storage Box', and optional scope 'under a given path'. It distinguishes from siblings like 'hetzner_list_storage_boxes' (which lists boxes, not folders) and 'hetzner_get_storage_box' (details).

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?

Description implies usage for listing folders, but does not explicitly state when to use this tool versus alternatives like 'hetzner_list_storage_boxes' or 'hetzner_get_storage_box'. No exclusions or context provided.

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

hetzner_list_storage_box_snapshotsList Storage Box SnapshotsB
Read-onlyIdempotent

List the snapshots of a Storage Box, with optional filtering by name, labels, or automatic-vs-manual.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
nameNoFilter by name
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
is_automaticNoFilter by whether the snapshot was created by the snapshot plan
label_selectorNoLabel filter, e.g. "env=prod,tier=web"

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, so the safety profile is covered. The description adds only filter capability (name, labels, automatic-vs-manual) and omits return format, pagination, or authorization needs, so it adds little behavioral 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.

Conciseness5/5

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

A single, front-loaded sentence with no wasted words. It says what the tool does and the optional filters immediately.

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 list tool with full schema coverage and rich annotations, the description is largely sufficient for selection and invocation. It does not cover pagination or differentiate the tool from get_storage_box_snapshot, leaving minor 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 the schema already documents all five parameters including id, name, sort, is_automatic, and label_selector. The description highlights three filter parameters but does not add syntax or semantics 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?

The description states a specific verb ('List') and resource ('snapshots of a Storage Box'), making the operation clear. It does not explicitly distinguish itself from sibling get_storage_box_snapshot or mention scope limits, so a 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?

No when-to-use, when-not-to-use, or alternative tools are mentioned. An agent could infer it from the verb, but the description provides no explicit routing guidance versus get_storage_box_snapshot or list_storage_boxes.

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

hetzner_list_storage_box_subaccountsList Storage Box SubaccountsB
Read-onlyIdempotent

List the subaccounts of a Storage Box, with optional filtering by name, username, or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
nameNoFilter by name
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
usernameNoFilter by subaccount username
label_selectorNoLabel filter, e.g. "env=prod,tier=web"

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, idempotentHint=true, destructiveHint=false, and openWorldHint=true, covering the safety profile. The description adds only that filtering is optional; it does not disclose auth needs, rate limits, pagination, or return format. With annotations carrying the behavioral burden, this is a modest addition.

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 front-loaded sentence with no filler. It efficiently states purpose and filtering, though it could be slightly more complete by mentioning sort.

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 annotation coverage and complete parameter documentation in the schema, the description states the operation and optional filters adequately. The only notable gap is usage routing against the singular get sibling, which belongs to usage guidelines.

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 all five parameters (id, name, sort, username, label_selector) are already documented in the schema. The description lists name, username, and labels as filters but omits sort and the required id; 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 ('List') and resource ('subaccounts of a Storage Box') with filtering scope. Clear enough to distinguish from the singular get_storage_box_subaccount sibling, but does not explicitly name the alternative or rule it 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?

No when-to-use guidance. It does not say when to call this versus hetzner_get_storage_box_subaccount or other list endpoints, nor any prerequisites. Usage is only implied by the tool name.

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

hetzner_list_storage_box_typesList Storage Box TypesA
Read-onlyIdempotent

List all available Storage Box types with their capacity, limits, and pricing.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by name
pageNoPage number
per_pageNoResults per page (max 50)

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already provide readOnlyHint, destructiveHint, and idempotentHint, so the safety profile is clear. The description adds the scope of 'all available' types but does not detail pagination behavior or other operational context beyond the schema. 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.

Conciseness5/5

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

The description is a single, well-structured sentence that front-loads the main action and key returned content. No wasted words.

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?

Given the tool's simplicity, strong annotations, and complete schema descriptions, the description provides sufficient context. It mentions the output content (capacity, limits, pricing) and the scope (all available), which is adequate for a listing 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 all three parameters described. The description adds no additional parameter-specific meaning beyond the schema, so baseline of 3 is 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?

The description clearly states the verb 'List', the resource 'Storage Box types', and specifies the returned fields (capacity, limits, pricing). This distinguishes it from sibling tools like 'get_storage_box_type' and 'list_storage_boxes'.

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 implicitly differentiates this from 'hetzner_get_storage_box_type' by indicating it lists all types, while alternatives are not explicitly mentioned. Clear context for when to use, but lacks explicit exclusions or alternatives.

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

hetzner_list_volume_actionsList Volume ActionsB
Read-onlyIdempotent

List all actions performed on a specific volume, such as attach, detach, and resize operations.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesVolume ID
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
statusNoFilter by action status: "running", "success", or "error"; pass an array for multiple statuses
per_pageNoResults per page (max 50)

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare this as a read-only, idempotent, non-destructive, open-world operation, so the safety profile is covered. The description adds that these are historical actions on a specific volume, but it does not disclose return format, pagination behavior, or any rate-limit/auth details beyond what the 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.

Conciseness4/5

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

The definition is a single sentence that front-loads the core purpose and uses the remainder for clarifying examples. It is appropriately sized with little waste, though the examples could be seen as slightly non-essential.

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 endpoint, the description, complete parameter schema, and full annotation set give the agent enough to call the tool correctly. The main omission is that return values and pagination are not described, but no output schema exists and the schema already covers the filter parameters.

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 five parameters including the required volume ID and optional filters. The description adds no parameter-level details such as ID format or sort syntax, so the baseline score 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 specific verb ('List') and resource ('actions performed on a specific volume') and gives examples ('attach, detach, and resize operations'). It is clear enough to distinguish this from sibling list endpoints for servers, networks, etc., but it does not explicitly contrast itself with alternatives the way a top-tier definition would.

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 explicit when-to-use or when-not-to-use guidance, and it does not name an alternative tool or condition. It leaves the agent to infer usage from the purpose statement alone.

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

hetzner_list_volumesList VolumesB
Read-onlyIdempotent

List all volumes in the project, with optional filtering by name, label, or status.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by volume name
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
statusNoFilter by volume status
per_pageNoResults per page (max 50)
label_selectorNoLabel filter, e.g. "env=prod,tier=web"

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, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered without description help. The description adds only the project scope and optional filtering context; it does not disclose pagination behavior, authorization needs, or return format.

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 states the resource, scope, and optional filters efficiently.

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 low complexity, full schema coverage, and rich annotations, the description is largely complete for a simple list operation. It omits pagination and output shape, but for this read-only list tool 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 description coverage is 100%, so every parameter including page, sort, per_page, and label_selector is already documented in the schema. The description mentions name, label, and status filtering, but adds no syntax or format detail beyond what the schema provides.

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

Purpose4/5

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

The description uses a specific verb and resource, 'List all volumes in the project,' and adds scope plus filterable fields. It is clear enough to separate from get/create/delete/update volume siblings, but it does not explicitly distinguish itself from the similarly named hetzner_list_volume_actions 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 description states what the tool does and what filters are available, but gives no guidance on when to use it versus alternatives, no prerequisites, and no exclusions. The filtering mention is parameter-oriented rather than usage-oriented.

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

hetzner_list_zone_actionsList DNS Zone ActionsA
Read-onlyIdempotent

List all actions performed on a specific DNS zone, such as imports, TTL changes, and protection toggles.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
statusNoFilter by action status: "running", "success", or "error"; pass an array for multiple statuses
per_pageNoResults per page (max 50)
id_or_nameYesZone ID or name

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, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful domain context about what kinds of actions appear in the results, but says nothing about pagination behavior or result ordering, so it goes only modestly beyond the structured data.

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

Conciseness5/5

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

One sentence, zero filler, with the core verb and resource front-loaded and illustrative examples kept brief. Nothing to trim.

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 a fully documented schema and no output schema, the description covers what is being listed and the action categories involved. It could note the paginated/filterable nature of results, but no critical invocation detail 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 five parameters (including the id_or_name required field and the status/sort/page/per_page filters) are already documented. The description adds no syntax or filtering detail beyond the schema, which is the expected baseline when the schema does the heavy lifting.

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

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 (actions performed on a DNS zone) and enumerates example action types (imports, TTL changes, protection toggles), which cleanly separates it from hetzner_list_zone_rrsets. It does not explicitly name a sibling or contrast against one, but the resource is unambiguous.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: an agent can infer this audits action history for a zone, but there is no explicit when-to-use, when-not, or routing to alternatives such as hetzner_list_zone_rrsets or hetzner_get_zone. Nothing is misleading, but nothing is spelled out either.

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

hetzner_list_zone_rrsetsList DNS Zone RRSetsA
Read-onlyIdempotent

List all RRSets in a DNS zone, with optional filtering by name, type, or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFilter by name
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
typeNoFilter by one or more record types
per_pageNoResults per page (max 50)
id_or_nameYesZone ID or name
label_selectorNoLabel filter, e.g. "env=prod,tier=web"

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered by structured data. The description adds the pagination/filtering behavior of a list operation, but does not disclose pagination defaults, result limits, or what the response contains. With annotations carrying the safety burden, this is an adequate 3.

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 sentence that front-loads the verb, resource, and scope, followed by the filter clause. No waste.

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 list tool with full schema coverage and annotations covering safety, the description is minimally complete. It omits pagination behavior and the relationship to paginated siblings, which would help an agent that must page through results, but nothing critical to invoking it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% – every parameter is documented in the schema, including filter semantics for name, type, label_selector, and sort syntax. The description only repeats the existence of filters without adding format or behavior detail, so baseline 3 is correct.

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 (List) and resource (RRSets) scoped to a DNS zone, and it distinguishes itself from the read-single sibling get_zone_rrset by noting it returns all RRSets.

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 mentions optional filtering by name, type, or labels, which implies when the filters are useful, but it never explains when to use this vs. get_zone_rrset or other zone tools. Usage context is implied rather than explicit.

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

hetzner_list_zonesList DNS ZonesA
Read-onlyIdempotent

List all DNS zones in the project, with optional filtering by name, mode (primary/secondary), or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoFilter by zone mode
nameNoFilter by name
pageNoPage number
sortNoSort field, e.g. "id:asc" or "name:desc"; pass an array for multiple sort fields
per_pageNoResults per page (max 50)
label_selectorNoLabel filter, e.g. "env=prod,tier=web"

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is fully covered by structured data. The description adds only that filtering is optional; it says nothing about pagination (page/per_page exist) or result ordering 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?

A single, front-loaded sentence with zero filler that states the resource and the filtering options in order of importance. 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 read-only list tool whose annotations carry the safety profile and whose schema documents all six parameters, this is largely complete. The absence of any pagination context (despite page/per_page params) is the only meaningful 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 every parameter (mode, name, page, sort, per_page, label_selector) is already documented in the schema. The description restates a subset of the filters but adds no syntax or format detail beyond what the schema provides, so baseline 3 applies.

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

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 in the project') and enumerates the filter dimensions, making its scope immediately clear. It is distinguishable from single-resource siblings like hetzner_get_zone, though it does not explicitly name 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 phrase 'with optional filtering by name, mode, or labels' implies when filtering applies, but there is no explicit guidance on when to use this list tool versus hetzner_get_zone or hetzner_list_zone_rrsets. 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.

hetzner_power_offPower Off ServerA
Destructive

Force power off a server immediately. This is like pulling the power cord.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true, so the description's 'force power off' adds only the 'pulling the power cord' analogy. No additional behavioral context (e.g., data safety, prerequisites) is disclosed beyond annotations.

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

Conciseness5/5

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

Two short, direct sentences with no wasted words. The purpose is front-loaded and the analogy adds clarity efficiently.

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, destructive tool with one parameter and no output schema, the description is nearly complete. Minor gap: it does not mention prerequisites (e.g., server must be running) or the resulting 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 coverage is 100% for the single parameter 'id', which is described as 'Server ID' in the schema. The description does not add any extra meaning or context for this parameter.

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 clearly states the action ('force power off') and the resource ('a server'), with an analogy ('like pulling the power cord') that distinguishes it from graceful shutdown or reboot 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 implies immediate forceful shutdown but does not explicitly compare to alternatives like hetzner_shutdown or hetzner_reboot. No guidance on when to use this tool vs others is provided.

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

hetzner_power_onPower On ServerB
Destructive

Start a stopped server by powering it on.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already indicate mutating (readOnlyHint=false) and potentially destructive (destructiveHint=true). The description adds no extra behavioral context, such as prerequisites, side effects, or behavior if server is already running. No contradiction with annotations, but insufficient transparency beyond annotations.

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

Conciseness4/5

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

The description is a single concise sentence with no wasted words. It is front-loaded and efficient, though slightly lacking in detail for full clarity.

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 description is adequate for a simple single-parameter tool, but lacks context on idempotency (idempotentHint=false), preconditions, and error handling. With sibling tools like hetzner_reboot and hetzner_reset, more distinction would be helpful.

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 the parameter 'id' described as 'Server ID'. The description does not add additional meaning or clarification beyond the schema, so baseline score 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 'Start a stopped server by powering it on' clearly states the action (power on) and the target resource (stopped server). It distinguishes itself from siblings like hetzner_power_off, but doesn't explicitly differentiate from hetzner_reboot or hetzner_shutdown.

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 server is stopped, but does not provide explicit guidance on when to use this tool vs alternatives like hetzner_reboot or hetzner_reset. No when-not-to-use or context hints are given.

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

hetzner_rebootReboot ServerA
Destructive

Send an ACPI reboot signal to the server for a soft reboot.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID

TDQS

A3.8/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 description's mention of 'soft reboot' adds mild context about the nature of the reboot. However, it does not disclose side effects like connection loss or that the server must be powered on.

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 sentence (11 words) that is front-loaded with the action. No redundant information; every word serves a purpose.

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 tool with one parameter and no output schema, the description is nearly complete. It covers the action and method. Minor gap: no mention of required server state (e.g., must be running), but the sibling tools list provides context for alternatives.

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?

The input schema has 100% description coverage with 'Server ID' for the single parameter. The description only reinforces that the param identifies the server, adding no new semantic meaning 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 uses specific verb 'send' and resource 'server' with explicit method 'ACPI reboot signal for a soft reboot'. This clearly states the action and distinguishes it from hard reset (hetzner_reset) and power operations (hetzner_power_off, hetzner_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 description implies usage for soft rebooting a server but does not explicitly state when to use this tool versus alternatives like hetzner_reset (hard reset) or hetzner_shutdown (graceful shutdown). No guidance on prerequisites or context is provided.

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

hetzner_rebuild_serverRebuild ServerB
Destructive

Rebuild a server from an image, wiping all data on the server.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID
imageYesImage name or ID to rebuild from
user_dataNoCloud-init user data to apply to the rebuilt server. Overrides the value set at creation.

TDQS

B3.4/5.0
Behavior3/5

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

The description reinforces the annotation's destructiveHint with 'wiping all data' and specifies the image source. However, it does not disclose other potential side effects (e.g., network changes, asynchronicity).

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 sentence, concise and front-loaded. No wasted words. Could be slightly more structured but 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?

No output schema, but the tool's destructive nature is clear. Lacks mention of return values or asynchronous behavior, but acceptable for a simple rebuild 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?

The input schema already covers all parameters with descriptions (100% coverage). The description adds no additional meaning beyond what the schema 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 clearly states the action (rebuild), resource (server), and effect (wiping all data). It distinguishes from siblings like 'reset' by specifying 'from an image' and the destructive nature.

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 explicit guidance on when to use vs alternatives (e.g., 'reset', 'resize'). The description implies destructive use but does not compare or exclude other tools.

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

hetzner_remove_firewallRemove Firewall from ResourcesA
DestructiveIdempotent

Remove a firewall from one or more servers or label selectors.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
remove_fromYesResources to remove the firewall from

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true, which align with removal. The description adds that it removes from 'servers or label selectors' and can handle multiple resources (array input), but does not disclose other behavioral traits like whether the removal is immediate or 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.

Conciseness5/5

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

The description is a single, clear sentence that conveys the core purpose without any extraneous words or repetition.

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?

Given the tool has no output schema, the description could mention the expected response (e.g., an action object). However, for a simple removal operation with well-documented parameters, the description is adequate but not comprehensive.

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 both parameters. The description adds no additional meaning beyond the schema; it does not explain the structure of 'remove_from' or the relationship between type and the nested objects.

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 clearly states that the tool removes a firewall from servers or label selectors, using a specific verb and resource. It distinguishes from siblings like 'hetzner_apply_firewall' (opposite) and 'hetzner_delete_firewall' (deletes the firewall itself).

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. For example, it does not explain when to remove a firewall from resources vs deleting the firewall entirely, or when to use it vs other removal tools like 'hetzner_remove_lb_target'.

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

hetzner_remove_lb_targetRemove Load Balancer TargetC
DestructiveIdempotent

Remove a target from a load balancer.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
ipNoIP target
typeYesTarget type
serverNoServer target
label_selectorNoLabel selector target

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare destructiveHint: true and idempotentHint: true. The description adds no extra behavioral context, such as reversibility or side effects. It only repeats the basic action.

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

Conciseness3/5

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

The description is a single sentence, which is concise but overly brief for a tool with 5 parameters and nested objects. It lacks structure and front-loads only the action, not the key contextual details.

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?

Given the complexity (destructive action, nested parameters, no output schema), the description is incomplete. It fails to explain parameter relationships, required fields based on type, or what happens after removal.

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 100% schema coverage, the baseline is 3. The description does not add any parameter-specific guidance beyond what the schema provides, such as explaining the role of 'id' or how 'type' interacts with nested objects.

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 'Remove a target from a load balancer,' which clearly identifies the action and resource. It distinguishes from the sibling 'hetzner_add_lb_target'. However, it does not clarify what the required 'id' parameter represents (e.g., target ID or load balancer ID), slightly reducing clarity.

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 is provided on when to use this tool versus alternatives like 'hetzner_add_lb_target' or other remove tools. There is no mention of prerequisites, when-not to use, or context about target existence.

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

hetzner_remove_server_from_placement_groupRemove Server from Placement GroupA
DestructiveIdempotent

Remove a server from its placement group.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true, idempotentHint=true, and openWorldHint=true. The description adds no further behavioral context such as side effects, permissions, or reversibility beyond stating the removal.

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 extremely concise (one sentence) with no unnecessary words. It effectively communicates the tool's purpose without excess.

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 tool's simplicity (single required parameter, no output schema) and rich annotations, the description is nearly complete. It could mention that the server must be in a placement group, but the current description is still 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%, with the parameter 'id' described as 'Server ID'. The description does not add additional meaning or context about the parameter beyond what the schema provides.

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

Purpose5/5

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

The description clearly states the action (Remove) and the resource (server from its placement group). It distinguishes from sibling tools like hetzner_add_server_to_placement_group.

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 does not provide any guidance on when to use this tool versus alternatives, nor does it mention prerequisites or context. Usage is only implied by the operation name.

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

hetzner_remove_zone_rrset_recordsRemove Records from DNS Zone RRSetA
DestructiveIdempotent

Remove specific records from an RRSet (matched by value) without deleting the RRSet itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRRSet name
typeYesDNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)
recordsYesRecords to remove (matched by value)
id_or_nameYesZone ID or name

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already communicate destructive intent, idempotency, and open-world behavior. The description adds useful behavioral nuance: record matching is by value, and the RRSet itself survives the operation. This goes beyond the structured annotation hints without contradiction.

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

Conciseness5/5

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

A single sentence conveys the core operation, the matching criterion, and the critical non-destructive caveat about the RRSet itself. Every word earns its place with no redundancy.

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 four-parameter tool with fully described schema fields and annotations covering destructive, idempotent, and open-world traits, the description is complete. An agent knows what to remove, how records are matched, and what will not be deleted. No clarifyng gaps are evident.

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?

Input schema coverage is 100%, so the schema already documents all four parameters. The description adds only minimal semantic value by mentioning value-based matching, which is also present in the records parameter description. This meets the baseline for high schema coverage but does not enrich parameter understanding further.

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 uses a specific verb ('Remove'), identifies the exact resource ('records from an RRSet'), and explains the matching mechanism ('matched by value'). It clearly differentiates this operation from deleting the entire RRSet, which is the main ambiguity among sibling tools.

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 implies the intended use case: remove a subset of records while preserving the RRSet itself. It implicitly distinguishes from delete_zone_rrset and from set/add/update record operations, though it does not explicitly name alternatives or provide exclusion criteria. That is still clear enough for an agent to choose correctly.

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

hetzner_request_consoleRequest Server ConsoleA

Request a noVNC WebSocket URL and credentials to access the server console. The URL is valid for a limited time.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID

TDQS

A4/5.0
Behavior4/5

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

Annotations indicate non-readonly and non-destructive behavior. The description adds important context: the URL is valid for a limited time. This goes beyond annotations, though it does not fully disclose potential side effects or auth requirements.

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

Conciseness5/5

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

Two sentences with no redundancy. The first sentence states the action and result, the second adds a key detail. 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?

Given low complexity (1 param, no output schema), the description adequately explains what the tool returns (URL and credentials) and its time-limited nature. Slight gap: missing mention of server state requirements (e.g., powered on).

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 covers the only parameter 'id' with full description 'Server ID'. The description adds no additional meaning beyond the schema, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool requests a noVNC WebSocket URL and credentials for server console access, with a specific verb 'request' and resource 'console'. It distinguishes from sibling tools like 'hetzner_get_server' or 'hetzner_attach_iso' by specifying console access.

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 usage for accessing server console but does not provide explicit when-to-use or when-not-to-use guidance. No alternatives or prerequisites (e.g., server must be running) are mentioned.

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

hetzner_resetReset ServerA
Destructive

Perform a hard reset on the server, equivalent to pressing the reset button.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already indicate destructiveHint: true, so the description's mention of 'hard reset' adds minimal extra behavioral context beyond confirming hardware-level impact. It does not disclose side effects or additional consequences.

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 sentence that is concise and directly communicates the tool's action. No unnecessary words or redundant 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 simple tool with one parameter and clear annotations, the description adequately covers the necessary context. The lack of output schema is acceptable as the action is straightforward.

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?

The input schema has 100% description coverage for the single parameter 'id', which is already well-documented. The description does not add any new meaning or usage details 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 uses a specific verb ('perform a hard reset') and resource ('the server'), making the purpose clear. The phrase 'equivalent to pressing the reset button' further clarifies the action and distinguishes it from other server operations like reboot or power off.

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 provide any guidance on when to use this tool versus alternatives (e.g., reboot, shutdown, power_off). It lacks explicit context about prerequisites or scenarios where a hard reset is appropriate.

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

hetzner_reset_server_passwordReset Server Root PasswordA
Destructive

Reset the root password of a server. The server is rebooted and a new root password is returned in the result.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true, but the description adds that the server is rebooted and a new password is returned. This provides additional behavioral context beyond the annotations, such as the reboot side effect and the return value.

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 extremely concise, consisting of only two sentences. It contains no redundant information and every word contributes to understanding the tool's purpose and 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?

For a simple tool with one parameter and no output schema, the description covers the essential aspects: what it does, that it reboots the server, and what is returned. It could mention that the old password is invalidated, but overall it is complete enough.

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?

The only parameter, 'id', is fully described in the schema as 'Server ID' (100% coverage). The description does not add any extra meaning or constraints beyond what the schema 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 clearly states the tool's action: reset the root password of a server. It also mentions the side effect (server reboot) and what is returned (new root password). This uniquely identifies the tool among siblings, as no other tool resets passwords.

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 the tool is used when a root password reset is needed, but it does not explicitly state when to use this tool versus alternatives like 'reboot' or 'power_off'. No exclusions or prerequisites are mentioned.

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

hetzner_reset_storage_box_passwordReset Storage Box PasswordA
Idempotent

Reset the password of a Storage Box main account to the supplied value.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
passwordYesNew password for the Storage Box main account

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already indicate non-readonly, non-destructive, idempotent. Description adds minimal behavioral context beyond the operation itself, no extra details on side effects or constraints.

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?

Single sentence of 14 words, front-loaded with key information. No filler or redundant content.

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 2-param tool with no output schema, description covers the operation adequately. Could mention how to obtain the Storage Box ID or password constraints, but still functional.

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 clear descriptions for both parameters. Description does not add meaning beyond provided schema, so baseline 3 is 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?

The description clearly states the action (reset), resource (Storage Box main account), and the supplied value. It distinguishes from sibling tools like hetzner_reset_storage_box_subaccount_password and hetzner_reset_server_password.

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 vs alternatives, no prerequisites or context on when not to use. Lacks explicit when/when-not or alternative tool references.

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

hetzner_reset_storage_box_subaccount_passwordReset Storage Box Subaccount PasswordA
Idempotent

Reset the password of a Storage Box subaccount to the supplied value.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
passwordYesNew password for the subaccount
subaccount_idYesSubaccount ID

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already provide idempotentHint=true, destructiveHint=false, and readOnlyHint=false. The description adds no further behavioral context (e.g., side effects, permission requirements, or return value). It does not contradict annotations, but it does not enhance transparency beyond what is already known.

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 sentence of 13 words, front-loading the verb 'Reset'. Every word is necessary, and there is no redundancy or wasted text.

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?

Given the low complexity (3 required params, no output schema), the description is adequate but not complete. It explains what the tool does but omits information about the result (e.g., no mention of success response) or any constraints on the password format. For a password reset, this is 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% with clear descriptions for each parameter. The description merely echoes 'supplied value' without adding format constraints or additional meaning. Baseline 3 is appropriate since 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?

The description clearly states the action (reset), the resource (password of a Storage Box subaccount), and specifies 'to the supplied value', indicating the password parameter. This distinguishes it from siblings like hetzner_reset_storage_box_password (different resource) and hetzner_update_storage_box_subaccount (general update).

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 guidance on when to use this tool versus alternatives, nor does it mention prerequisites or conditions. It is a minimal description without contextual advice.

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

hetzner_resize_serverResize ServerA
Idempotent

Change the server type. The server will be stopped and migrated if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID
server_typeYesTarget server type name (e.g. "cx22")
upgrade_diskYesWhether to upgrade the disk size (cannot be downgraded later)

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate mutability and idempotency. The description adds key behavioral insight: the server may be stopped and migrated. This goes beyond annotations and helps the agent anticipate side effects.

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

Conciseness5/5

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

Two sentences, front-loaded with the purpose, followed by the key behavioral note. No wasted words; 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?

For a simple mutation with three required parameters and good annotations, the description covers the essential action and side effect. It could mention the resulting server state, but overall it is sufficiently complete for an agent to use 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?

The input schema has 100% coverage with descriptive parameter explanations. The tool description adds no additional parameter information, so per guidelines with high schema coverage, a baseline of 3 is 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?

The description 'Change the server type' uses a specific verb and resource, making the tool's purpose unmistakable. It distinguishes itself from siblings like 'rebuild' or 'reset' by focusing solely on type change.

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 mentions that the server will be stopped and migrated if needed, providing some context on when it's appropriate. However, it lacks explicit guidance on when not to use this tool or alternatives, such as if no downtime is desired.

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

hetzner_resize_volumeResize VolumeA
Idempotent

Increase the size of a volume. Volumes can only be made larger, not smaller.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesVolume ID
sizeYesNew size of the volume in GB (must be larger than current size)

TDQS

A3.9/5.0
Behavior4/5

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

Beyond annotations (idempotentHint=true), the description adds the irreversible increase-only behavior, which is valuable for an agent to understand side effects.

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

Conciseness5/5

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

Two sentences, no filler, immediately states the action and key constraint. Front-loaded and efficient.

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 simple mutation tool with no output schema, the description fully explains the operation and its unidirectional nature. No gaps for an agent to use it 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 already provides full descriptions for both parameters. The description reinforces the size constraint but adds no new details beyond what the schema states.

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 clearly states the tool increases volume size and explicitly notes the non-reversible nature, distinguishing it from creation, deletion, or other volume modifications.

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 like 'hetzner_create_volume' or 'hetzner_update_volume'. The constraint 'only larger, not smaller' is stated but not framed as a usage condition.

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

hetzner_retry_certificateRetry Certificate IssuanceA

Retry issuance or renewal of a managed certificate that has failed.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID

TDQS

A3.7/5.0
Behavior3/5

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

Annotations indicate write operation with side effects (openWorldHint=true). Description adds that it retries issuance/renewal but does not disclose potential outcomes or async nature.

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?

Single sentence, clear and direct, no unnecessary words.

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?

Minimal description for a simple tool. No output schema, but could mention return value or post-conditions. Adequate but not comprehensive.

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 covers parameter 'id' with basic description 'Resource ID'. Tool description adds no further meaning, so baseline 3 is 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?

Description clearly states the verb 'Retry' and resource 'managed certificate', specifying the context of failure for issuance or renewal. Distinguishes from create and update tools.

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?

Description implies use when a certificate has failed, but does not explicitly state when not to use, prerequisites, or alternatives like checking status first.

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

hetzner_rollback_storage_box_snapshotRollback Storage Box SnapshotA
Destructive

Roll a Storage Box back to a snapshot. This overwrites current data with the snapshot contents.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
snapshotYesName of the snapshot to roll back to

TDQS

A4.1/5.0
Behavior4/5

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

The description adds that it overwrites current data, which is consistent with the destructiveHint: true annotation. No contradiction, but could mention irreversible nature more explicitly.

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 no wasted words. It is front-loaded with the action and immediately explains the consequence.

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 simple rollback tool with two parameters and no output schema, the description fully conveys the purpose and effect. No gaps 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?

Both parameters are fully described in the input schema with clear descriptions. The tool description does not add extra meaning beyond what the schema provides, so baseline score is 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?

The description clearly states the verb 'Roll a Storage Box back to a snapshot' and the resource, distinguishing it from siblings like create or delete snapshot. It provides specific action and object.

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 usage when rollback is needed but provides no explicit guidance on when not to use or alternatives among the many sibling snapshot tools.

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

hetzner_set_firewall_rulesSet Firewall RulesA
Idempotent

Replace all rules of a firewall with a new set of rules.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
rulesYesNew set of firewall rules (replaces all existing)

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare destructiveHint=false and idempotentHint=true. The description adds the key insight that the operation replaces all existing rules (not appends), which is consistent with the name. However, it does not elaborate on side effects, permissions required, or the fate of old rules beyond replacement. Given annotation coverage, the description provides minimal additional value.

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, clear sentence with no extraneous words. It is front-loaded with the key action ('Replace all rules') and is optimally concise for its purpose.

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?

The description is complete enough given the tool's simplicity and the rich schema/annotations. It conveys the core operation. However, it could briefly mention that this is a full replacement (overwrite) to avoid ambiguity with append-like operations. Despite that, it is nearly 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%; both 'id' and 'rules' have detailed schema descriptions. The tool description adds no further parameter context. Since schema already documents parameters adequately, a baseline score of 3 is 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?

The description clearly states the action: 'Replace all rules of a firewall with a new set of rules.' It specifies the verb (replace) and resource (firewall rules), and distinguishes from sibling tools like 'hetzner_apply_firewall' (which applies to servers) and 'hetzner_update_firewall' (likely for other attributes).

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 guidance on when to use this tool versus alternatives. It does not state when not to use it, nor does it mention the relationship to other firewall-related tools like 'hetzner_get_firewall' or 'hetzner_update_firewall'. Users must infer usage from the tool name alone.

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

hetzner_set_zone_rrset_recordsSet DNS Zone RRSet RecordsA
DestructiveIdempotent

Replace the full list of records in an RRSet. Existing records not in the payload are removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRRSet name
typeYesDNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)
recordsYesFull replacement list of records for this RRSet
id_or_nameYesZone ID or name

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is known. The description earns credit by adding the specific destructive detail — exactly what gets removed (existing records not in the payload) — which explains the idempotent full-sync semantics. No contradiction with annotations.

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

Conciseness5/5

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

Two sentences with zero waste. The primary action is front-loaded, and the destructive consequence is stated immediately in the second sentence. 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 4-parameter, all-required mutation with no output schema, the description captures the essential semantics: full replacement and destructive removal. Minor gaps exist — no mention of response behavior, prerequisites like zone existence, or how TTL/protection interact — but the schema and annotations carry the remaining burden 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 description coverage is 100%, so the schema already documents all four parameters, including 'records' as a 'Full replacement list'. The description reinforces this by stating the consequence of the records payload (removal of omitted entries), adding marginal meaning beyond the schema but not compensating for anything missing.

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 verb 'Replace' is specific, the resource is clearly identified ('the full list of records in an RRSet'), and the second sentence ('Existing records not in the payload are removed') sharply differentiates this from siblings like hetzner_add_zone_rrset_records and hetzner_remove_zone_rrset_records. An agent can distinguish this tool without inspecting 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?

The 'full list' and 'removed' phrasing implies this is for wholesale replacement rather than incremental changes, but the description never names alternatives or states when not to use it. Given siblings add_zone_rrset_records, remove_zone_rrset_records, and update_zone_rrset_records exist, explicit routing guidance would be valuable; the tool leaves it to inference.

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

hetzner_shutdownShutdown ServerA
Destructive

Send an ACPI shutdown signal for a graceful OS shutdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID

TDQS

A3.7/5.0
Behavior3/5

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

The description adds context that the shutdown is graceful and via ACPI, beyond the destructiveHint annotation. However, it does not mention potential outcomes (e.g., if server is already off, or OS ignores ACPI).

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 sentence, front-loaded with action and resource, no redundant words.

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 no return value description, the description is adequate for a simple action but could mention the response (e.g., action object) for completeness.

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?

The single parameter 'id' is fully described in the schema as 'Server ID'. The description adds no extra meaning about how to obtain or format the ID, and schema coverage is 100%, so baseline 3.

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 clearly states a specific verb ('Send an ACPI shutdown signal') and resource ('graceful OS shutdown'), distinguishing it from sibling power tools like power_off (hard power off) and reboot.

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 for a graceful shutdown via ACPI but does not explicitly compare to alternatives like power_off or reset, nor state when not to use it.

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

hetzner_unassign_floating_ipUnassign Floating IPA
DestructiveIdempotent

Unassign a floating IP from the server it is currently assigned to.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesFloating IP ID

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds little beyond stating the action, but is consistent and does not contradict 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 a single, clear sentence with no unnecessary words. It is concise and front-loaded with the key 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 simple tool with one parameter and no output schema, the description adequately explains the action. It could mention that the floating IP must be currently assigned, but it is implied.

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 100% schema coverage and a single parameter 'id', the schema already documents it. The description adds no additional meaning to the parameter.

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 clearly states the verb 'unassign', the resource 'floating IP', and the context 'from the server it is currently assigned to', distinguishing it from sibling tools like 'assign_floating_ip'.

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 implies when to use (when a floating IP is assigned to a server), but lacks explicit guidance on when not to use or mention of alternatives like 'assign_floating_ip' for reassignment.

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

hetzner_unassign_primary_ipUnassign Primary IPB
DestructiveIdempotent

Unassign a primary IP from the server it is currently assigned to.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPrimary IP ID

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true. Description adds no further behavioral context beyond 'unassign', which is already implied by the 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?

Single efficient sentence with no wasted words. Perfectly concise.

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 unassign action with one parameter and no output schema, the description is adequate. Could mention that the IP becomes available, but not necessary.

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 with schema coverage 100%. Description does not add meaning beyond the schema's 'Primary IP 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?

Description clearly states the action (unassign) and resource (primary IP from server). However, it does not distinguish between primary IP and floating IP assignments, especially given sibling tools like unassign_floating_ip.

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 like unassign_floating_ip, nor any prerequisites or consequences beyond the base action.

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

hetzner_update_certificateUpdate CertificateB
Idempotent

Update a certificate name or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
nameNoNew name for the certificate
labelsNoLabels as key-value pairs

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already indicate mutation (readOnlyHint=false), non-destructiveness (destructiveHint=false), and idempotency (idempotentHint=true). The description adds no behavioral context beyond the annotations, such as permission requirements, side effects, or response 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?

The description is a single sentence of 5 words, extremely concise. While it efficiently conveys the core purpose, it could include more context without becoming verbose. It is front-loaded but lacks depth.

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?

Given the simplicity of the tool (3 parameters, no output schema) and existing annotations, the description is minimally adequate. However, it omits details about return values, validation constraints, or typical usage patterns that would aid an agent in understanding the tool's full behavior.

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 description's mention of 'name or labels' aligns with the schema parameters. However, the description does not add new semantic information beyond what the schema provides, meriting a baseline score of 3.

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 'Update a certificate name or labels' clearly states the verb (Update) and the resource (certificate), and specifies the updatable fields (name or labels). This is distinct from siblings like create_certificate or delete_certificate, providing clear purpose 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?

No guidance is provided on when to use this tool versus alternatives, such as hetzner_get_certificate for inspection or hetzner_create_certificate for new ones. There is no mention of prerequisites, exclusions, or context, leaving the agent to infer usage.

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

hetzner_update_firewallUpdate FirewallA
Idempotent

Update a firewall name or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
nameNoNew name for the firewall
labelsNoLabels as key-value pairs

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate non-readonly, non-destructive, idempotent, open world. The description adds nothing beyond stating the updatable fields. No behavioral details like whether labels merge or replace.

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?

Single sentence, zero waste. Efficiently conveys the core action.

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 update with 3 parameters and no output schema, the description is minimally adequate. However, it omits details like whether labels are appended or replaced, which could affect usage.

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 clear descriptions for each parameter. The description 'Update a firewall name or labels' adds no new meaning 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 clearly states 'Update a firewall name or labels,' specifying the exact fields affected. It distinguishes from sibling tools like set_firewall_rules, which updates rules.

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 guidance on when to use this tool vs. alternatives (e.g., set_firewall_rules for rules). The agent must infer context from the name.

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

hetzner_update_floating_ipUpdate Floating IPA
Idempotent

Update a floating IP's name, description, or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesFloating IP ID
nameNoNew name
labelsNoLabels as key-value pairs
descriptionNoNew description

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false (write), destructiveHint=false, idempotentHint=true, and openWorldHint=true. The description adds no further context beyond 'update', such as whether it merges or replaces labels or if partial updates are allowed. No contradiction with annotations.

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

Conciseness5/5

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

The single-sentence description is succinct, front-loaded with the core action, and contains no unnecessary words. Every word earns its place.

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, but the description does not clarify return values (e.g., updated floating IP object). Given the tool's simplicity and full parameter coverage, the description is adequate but leaves out behavioral details like idempotency implications.

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?

Input schema provides 100% coverage with descriptions for all four parameters (id, name, description, labels). The description merely restates these fields without adding new semantics, meeting the baseline expectation but not exceeding it.

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 'Update a floating IP's name, description, or labels' clearly specifies the verb (update) and resource (floating IP), and explicitly lists the modifiable fields, distinguishing it from sibling tools like hetzner_change_floating_ip_protection and hetzner_change_floating_ip_rdns.

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 guidance on when to use this tool versus alternatives (e.g., for changing protection or RDNS), nor does it mention prerequisites or constraints. Usage is only implied by the tool's name and fields.

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

hetzner_update_imageUpdate ImageA
Idempotent

Update an image's description, type, or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesImage ID
typeNoImage type (only snapshot allowed for conversion)
labelsNoLabels as key-value pairs
descriptionNoNew image description

TDQS

A3.8/5.0
Behavior3/5

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

The description adds minimal behavioral context beyond the annotations. Annotations already indicate the operation is idempotent and non-destructive. The description lacks details such as whether updates are partial or how labels are merged, which would provide further transparency.

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?

The description is concise (one sentence, 8 words) and front-loaded with the action and resource. It could be slightly more informative (e.g., 'Partially update an image's metadata fields'), but it is efficient and to the point.

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 description is adequate for a simple update operation with good annotations and schema coverage. However, it does not explain that updating the type parameter converts the image to a snapshot, or that labels are replaced entirely, leaving some gaps for an agent to understand full behavior.

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?

The input schema already provides full descriptions for all parameters (100% coverage). The description merely lists the fields without adding new meaning or clarifying nuances 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 clearly states the action (update) and the resource (image) along with the specific attributes that can be modified (description, type, labels). It effectively distinguishes from sibling tools like get_image, delete_image, and change_image_protection.

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 implicitly guides usage by listing the modifiable fields, but it does not explicitly state when to use this tool versus alternatives (e.g., change_image_protection). However, the specificity of the resource and attributes makes the usage context clear.

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

hetzner_update_lb_serviceUpdate Load Balancer ServiceB
Idempotent

Update an existing service on a load balancer.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
httpNoHTTP-specific service settings
protocolYesService protocol: tcp, http, or https
listen_portYesPort the load balancer listens on
health_checkNoHealth check configuration
proxyprotocolNoEnable PROXY protocol
destination_portYesPort traffic is forwarded to

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate idempotent and non-destructive behavior. The description adds 'Update', which implies mutation, consistent with readOnlyHint=false. However, it does not elaborate on behavioral traits like partial update semantics or the effect of calling with minimal parameters. The description adds minimal value beyond annotations.

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

Conciseness5/5

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

The description is extremely concise and front-loaded: 'Update an existing service on a load balancer.' Every word is necessary and no filler. It is well-structured and efficient.

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?

Given the tool's complexity (7 parameters, nested objects for health_check and http) and lack of output schema, the description is too minimal. It does not explain that it performs a partial update, that required parameters (id, protocol, listen_port, destination_port) must always be provided, or how nested fields are handled. A more detailed description is needed for effective use.

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?

The input schema has 100% description coverage for all parameters. The description does not provide additional parameter-level meaning beyond what the schema already offers. The baseline of 3 is appropriate as the schema carries the burden.

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 clearly states the action ('Update') and the resource ('an existing service on a load balancer'), which precisely matches the tool name. It effectively distinguishes from sibling tools like 'hetzner_add_lb_service' (add) and 'hetzner_delete_lb_service' (delete).

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 guidance on when to use this tool versus other alternatives. It does not mention prerequisites (e.g., load balancer must exist), nor does it clarify that this modifies an existing service, not creates one. No explicit when-to-use or when-not-to-use information is given.

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

hetzner_update_load_balancerUpdate Load BalancerB
Idempotent

Update a load balancer name or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
nameNoNew name for the load balancer
labelsNoLabels as key-value pairs

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already indicate idempotentHint=true, readOnlyHint=false, and destructiveHint=false, so the description need not repeat those. The description adds minimal behavioral context (it updates mutable fields). It does not mention side effects, prerequisite existence of the load balancer, or any behavioral constraints beyond what annotations convey. Acceptable but not enhanced.

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?

The description is a single, front-loaded sentence that directly states the tool's purpose. It is concise and free of superfluous information. However, it could be slightly more informative without losing conciseness, such as noting that only these two fields are modifiable.

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?

Given the large number of sibling tools (many with 'update' or 'change' in names), the description should clarify how this tool fits into the workflow. It does not mention that other aspects require separate change tools, nor does it describe the return value (no output schema). The description is insufficient for an agent to fully understand the tool's place among alternatives.

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?

Input schema provides 100% description coverage for all 3 parameters. The description reiterates that the tool updates 'name or labels', which is already evident from parameter names and descriptions. It adds no new semantic meaning beyond summarizing the intent. Baseline for full schema coverage is 3; no extra credit given.

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 the verb 'Update' and resource 'load balancer', and specifies 'name or labels'. This distinguishes it from other update-like tools such as 'hetzner_change_load_balancer_protection' which focus on other attributes. However, it does not explicitly exclude updating other aspects, leaving slight ambiguity.

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 guidance on when to use this tool versus alternatives. It does not mention that other changes (e.g., protection, algorithm) require different tools like 'hetzner_change_load_balancer_protection' or 'hetzner_change_lb_type'. The agent receives no when-to-use or when-not-to-use information.

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

hetzner_update_networkUpdate NetworkA
Idempotent

Update properties of a network such as name, labels, or vSwitch route exposure.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesResource ID
nameNoNew name for the network
labelsNoLabels as key-value pairs
expose_routes_to_vswitchNoWhether to expose routes to the vSwitch

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate idempotent and non-destructive behavior. The description adds context by naming the updatable fields (name, labels, expose_routes_to_vswitch), which informs the agent about what modifications are possible. It does not mention preconditions or side effects, but given the annotations, this is sufficient.

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 sentence, front-loaded with the action and resource, listing key properties. No unnecessary words; every part contributes to understanding.

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 update tool with four parameters (one required), the description adequately states what can be updated. No output schema exists, but the return value is not critical for an idempotent update. Could mention that changes are applied immediately, but overall sufficient.

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 all parameters. The description mentions three of the four parameters (name, labels, expose_routes_to_vswitch) by purpose but does not add additional meaning beyond what the schema descriptions provide.

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 clearly states 'Update properties of a network such as name, labels, or vSwitch route exposure.' It specifies the verb 'update' and the resource 'network', and lists the specific modifiable properties, distinguishing it from create/delete operations.

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 when to use this tool (to modify existing network properties) but does not explicitly state when not to use it or suggest alternatives. Sibling tools like change_network_protection exist, but no guidance is provided.

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

hetzner_update_placement_groupUpdate Placement GroupB
Idempotent

Update a placement group's name or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPlacement group ID
nameNoNew placement group name
labelsNoLabels as key-value pairs

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already indicate idempotentHint=true and readOnlyHint=false, so the mutation behavior is understood. Description adds no additional behavioral context beyond what annotations provide, so a baseline score 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?

Single sentence with no unnecessary words. Extremely concise and easy to parse.

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, and the description does not mention return values. However, for a simple update operation, the description is adequate though not thorough.

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 descriptions for all parameters. The description reiterates 'name or labels' but adds no new 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.

Purpose4/5

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

Description clearly states the tool updates a placement group's name or labels, with a specific verb and resource. It distinguishes from create/delete placement group tools but not from other update tools, though the resource is clear.

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 vs other tools like create_placement_group or delete_placement_group. No context on prerequisites, when the tool is appropriate, or when to avoid it.

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

hetzner_update_primary_ipUpdate Primary IPA
Idempotent

Update a primary IP's name, auto_delete setting, or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesPrimary IP ID
nameNoNew name
labelsNoLabels as key-value pairs
auto_deleteNoDelete the primary IP when the assignee is deleted

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare the tool as not read-only, not destructive, idempotent, and open world. The description does not add behavioral context beyond the annotation traits; it focuses on the fields rather than side effects or prerequisites.

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 sentence that efficiently conveys the tool's purpose and modifiable fields. No unnecessary words 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 simple update tool with 4 parameters (1 required) and no output schema, the description covers the purpose and fields. It lacks mention of return values or permissions, but annotations compensate for safety traits.

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 per-parameter descriptions. The description lists the same fields (name, auto_delete, labels) but does not add new meaning beyond the schema. It essentially restates existing information.

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 clearly states the verb 'Update' and the resource 'primary IP', and lists the specific modifiable fields (name, auto_delete, labels). This distinguishes it from sibling update tools and change tools.

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 implies usage for updating name, auto_delete, or labels, but does not explicitly state when to use this tool versus alternative change tools (e.g., hetzner_change_primary_ip_protection). No exclusions or alternatives are provided.

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

hetzner_update_serverUpdate ServerA
Idempotent

Update a server's name or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesServer ID
nameNoNew server name
labelsNoLabels as key-value pairs

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate the tool is not read-only (readOnlyHint=false) and not destructive (destructiveHint=false), and the description adds 'update' which aligns. However, it does not disclose additional behavioral traits such as whether the update triggers side effects (e.g., reboot) or requires specific 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?

The description is a single, efficient sentence with no wasted words. It is front-loaded with the action and resource.

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 metadata update tool, the description is adequate but not complete. It does not mention that updating labels is optional, that the id is required, or any potential effects. It relies on the schema for parameter 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 coverage is 100% with descriptions for each parameter. The description reiterates that 'name or labels' can be updated, but does not add new meaning 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 states the tool updates a server's name or labels, which is a specific verb and resource. It clearly distinguishes from sibling tools like hetzner_resize_server or hetzner_rebuild_server by specifying the exact fields that can be updated.

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 guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or compare with other update operations.

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

hetzner_update_ssh_keyUpdate SSH KeyA
Idempotent

Update an SSH key's name or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesSSH key ID
nameNoNew SSH key name
labelsNoLabels as key-value pairs

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate mutability (readOnlyHint=false) and idempotency. The description adds no additional behavioral context (e.g., return value, error states) beyond the annotations, meeting the baseline for adequate 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?

The description is a single, concise sentence that conveys the essential purpose without any superfluous 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?

Given the schema and annotations, the description is mostly complete for an update tool. However, it does not mention idempotency or what happens if the key does not exist, though annotations cover idempotency.

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 each parameter having a description. The tool description ('name or labels') aligns with these but adds no extra meaning beyond what the schema 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 clearly states the action ('Update') and the resource ('SSH key'), and specifies the editable fields ('name or labels'). This distinguishes it from sibling tools like create, delete, get, and list.

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 usage for modifying existing keys but does not explicitly state when to use this tool versus alternatives, nor does it mention prerequisites or exclusions.

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

hetzner_update_storage_boxUpdate Storage BoxA
Idempotent

Update the name and/or labels of a Storage Box.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
nameNoNew name for the Storage Box
labelsNoLabels as key-value pairs

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already indicate idempotentHint=true (idempotent) and destructiveHint=false. The description adds that only name/labels are updated, which is consistent but does not elaborate on behavior like partial updates or response. No contradiction with annotations.

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

Conciseness5/5

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

A single sentence of 9 words, highly concise and front-loaded. Every word is necessary and 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?

Given the annotations and full schema coverage, the description is adequate but minimal. It does not mention return values or idempotency, though annotations cover some behavioral context. For a simple update tool, it is sufficient but not enriched.

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%; each parameter already has a clear description. The tool description adds no further semantic meaning beyond the schema, so baseline score of 3 is 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?

The description clearly specifies the verb 'Update' and the resource 'Storage Box', and explicitly lists the modifiable fields 'name and/or labels'. This distinguishes it from sibling tools like 'hetzner_update_storage_box_access_settings', which update different properties.

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 the tool is for updating name and labels, but there is no explicit guidance on when to use it versus alternatives (e.g., 'hetzner_update_storage_box_access_settings' for access properties), nor any prerequisites or exclusions.

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

hetzner_update_storage_box_access_settingsUpdate Storage Box Access SettingsA
Idempotent

Update which access protocols (SSH, Samba, WebDAV, ZFS, external reachability) are enabled on a Storage Box.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
ssh_enabledNoWhether SSH/SFTP/SCP access is enabled
zfs_enabledNoWhether the ZFS snapshot directory is exposed
samba_enabledNoWhether Samba/CIFS access is enabled
webdav_enabledNoWhether WebDAV access is enabled
reachable_externallyNoWhether the Storage Box is reachable from outside the Hetzner network

TDQS

A3.6/5.0
Behavior3/5

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

Annotations indicate idempotentHint=true and destructiveHint=false, but the description does not add context beyond 'update'. It does not mention side effects (e.g., whether disabling a protocol closes active connections), authorization needs, or that changes are applied immediately. However, it does not contradict annotations and provides minimal 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?

Single sentence, front-loaded with the action, and efficiently lists the relevant protocols. No redundant words or unnecessary explanations. Every part of the description is essential.

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 tool's moderate complexity (6 parameters, all booleans plus ID), the description is sufficient for an agent to understand the purpose. The schema handles parameter details. No output schema exists, but update tools typically return confirmation. The description does not mention return values, but annotations (idempotentHint) imply predictable behavior. Completness is slightly reduced by lacking mention of the required 'id' 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 each parameter is already documented with clear semantics (e.g., boolean for each protocol). The description reaffirms the protocols but adds no additional meaning beyond the schema. Baseline score of 3 is appropriate as the description adds marginal value.

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 clearly states the action (update) and the resource (storage box access settings). It enumerates the specific protocols (SSH, Samba, WebDAV, ZFS, external reachability) that can be toggled, making the tool's purpose unambiguous. While sibling tools like hetzner_update_storage_box or hetzner_update_storage_box_subaccount_access_settings exist, this description differentiates by focusing on access protocols.

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 is provided on when to use this tool versus alternatives. For example, there is no mention of when to use hetzner_update_storage_box (which updates other box settings) or hetzner_change_storage_box_protection. The description does not specify prerequisites, not-to-use conditions, or recommended contexts.

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

hetzner_update_storage_box_snapshotUpdate Storage Box SnapshotA
Idempotent

Update the description and/or labels of a Storage Box snapshot.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
labelsNoLabels as key-value pairs
descriptionNoNew description for the snapshot
snapshot_idYesSnapshot ID

TDQS

A3.5/5.0
Behavior3/5

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

Annotations declare idempotent and open world hints. Description states 'update', consistent with non-destructive mutation. No additional behavioral details like effect on existing labels.

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?

Single sentence, 11 words, directly states purpose. No redundant 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?

Minimal but sufficient given schema and annotations. Lacks mention of response or required permissions, which are not critical for a simple update.

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 covers all parameters with descriptions. The description only names 'description and/or labels', adding no extra meaning 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 clearly states the tool updates snapshot metadata (description and/or labels). It distinguishes from sibling tools like create and delete snapshot.

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

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, prerequisites, or when not to use. Missing context such as 'only use if snapshot exists' or alternative for content changes.

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

hetzner_update_storage_box_subaccountUpdate Storage Box SubaccountB
Idempotent

Update the name, description, and/or labels of a Storage Box subaccount.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
nameNoNew display name for the subaccount
labelsNoLabels as key-value pairs
descriptionNoNew description for the subaccount
subaccount_idYesSubaccount ID

TDQS

B3.4/5.0
Behavior3/5

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

The description does not contradict annotations (readOnlyHint: false, destructiveHint: false, idempotentHint: true). It adds minimal value beyond the annotations, merely stating the action without detailing idempotency or partial update behavior. The annotations already cover safety and idempotency, so the description's lack of elaboration is acceptable but not exemplary.

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, concise sentence that front-loads the purpose. Every word is informative, with no unnecessary repetition or filler. It efficiently communicates the tool's action and scope.

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?

Given the tool's 5 parameters (2 required), lack of output schema, and no return value description, the description is incomplete. It does not explain that it performs a partial update (only provided fields are changed), any prerequisites, or what the response indicates (e.g., success or updated object). More context is needed for an agent to use it 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%, with each parameter having a description. The tool description lists the fields but adds no extra information beyond the schema, such as constraints or formatting rules. Baseline score of 3 is appropriate given 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 clearly states the verb 'Update' and the resource 'Storage Box subaccount', listing the specific fields affected (name, description, labels). This distinguishes it from sibling tools like hetzner_change_storage_box_subaccount_home_directory and hetzner_update_storage_box_subaccount_access_settings.

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. It does not mention that it is for updating basic metadata only, nor does it exclude other operations like home directory changes or access settings, leaving the agent to infer 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.

hetzner_update_storage_box_subaccount_access_settingsUpdate Storage Box Subaccount Access SettingsA
Idempotent

Update the access settings (read-only, SSH, Samba, WebDAV, external reachability) of a Storage Box subaccount.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesStorage Box ID
readonlyNoWhether the subaccount has read-only access
ssh_enabledNoWhether SSH/SFTP/SCP access is enabled for the subaccount
samba_enabledNoWhether Samba/CIFS access is enabled for the subaccount
subaccount_idYesSubaccount ID
webdav_enabledNoWhether WebDAV access is enabled for the subaccount
reachable_externallyNoWhether the subaccount is reachable from outside the Hetzner network

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already indicate the tool is a write operation (readOnlyHint=false), not destructive, idempotent, and open-world. The description adds context by listing the settings, but it does not disclose additional behavioral traits such as whether partial updates are supported, whether subaccount must exist, or any side effects. With annotations present, the description provides adequate but not enhanced 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?

The description is a single sentence, 17 words, front-loaded with action and resource. It efficiently enumerates the adjustable settings without redundancy or unnecessary 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?

The tool has 7 parameters, no output schema, and annotations. The description explains the purpose and lists settings, but it does not clarify that optional parameters retain their values if not provided, nor does it hint at the response format. While schema coverage is full, the brief description leaves some contextual 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%, with each parameter having a clear description. The tool description merely lists the same settings without adding new meaning. Baseline 3 applies as the description adds no additional value 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 clearly specifies the verb 'update' and the resource 'access settings of a Storage Box subaccount', listing the exact settings (read-only, SSH, Samba, WebDAV, external reachability). It effectively distinguishes this tool from siblings like 'hetzner_update_storage_box_access_settings' and 'hetzner_update_storage_box_subaccount' by targeting subaccount access settings specifically.

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 explicit guidance on when to use this tool versus alternatives, no prerequisites, and no exclusion criteria. Given the large sibling list, scenarios where this tool is appropriate are implied but not stated, leaving the agent without clear decision support.

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

hetzner_update_volumeUpdate VolumeA
Idempotent

Update a volume's name or labels.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesVolume ID
nameNoNew volume name
labelsNoLabels as key-value pairs

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate the tool is not destructive (destructiveHint=false) and idempotent. The description adds no further 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.

Conciseness5/5

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

The description is a single, clear sentence that gets straight to the point with no extraneous 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?

Given annotations and simple operation, the description is fairly complete. However, it could note that updating labels is non-destructive and reversible, but annotations already cover safety.

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?

The description mentions 'name or labels', but the schema already covers all parameters with descriptions (100% coverage). The description adds minimal value 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 clearly states the verb 'Update' and the resource 'volume's name or labels', distinguishing it from sibling tools like resize, attach, or delete.

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-use guidance is provided. The description does not differentiate from alternatives like deleting and recreating a volume with new labels.

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

hetzner_update_zoneUpdate DNS ZoneA
Idempotent

Update a DNS zone's labels. Other zone properties are managed via dedicated change_* action tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
labelsNoLabels as key-value pairs
id_or_nameYesZone ID or name

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare idempotentHint=true, destructiveHint=false, and readOnlyHint=false, which align with the description. However, the description does not add any behavioral details beyond what annotations provide, e.g., whether labels are merged or replaced.

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 consists of only two sentences, each serving a clear purpose: first stating the action, second providing usage boundaries. It is succinct and well-structured with no unnecessary words.

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?

Given the tool's simplicity (only updating labels) and the presence of clear annotations and schema, the description is complete. It effectively tells the agent what the tool does and what it doesn't do, avoiding the need for additional 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 already documents both parameters adequately. The description mentions 'labels' but adds no extra meaning beyond the schema. Thus, baseline score of 3 is 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?

The description explicitly states 'Update a DNS zone's labels.' It uses a specific verb ('Update') and resource ('DNS zone') with a clear scope ('labels'). It also distinguishes from siblings by noting that other properties are managed via dedicated change_* tools.

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

Usage Guidelines5/5

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

The description provides explicit guidance: 'Other zone properties are managed via dedicated change_* action tools.' This tells the agent when not to use this tool and directs it to alternatives, which is excellent for decision-making.

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

hetzner_update_zone_rrsetUpdate DNS Zone RRSetA
Idempotent

Update an RRSet's labels. Records and TTL are managed via dedicated action tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRRSet name
typeYesDNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)
labelsNoLabels as key-value pairs
id_or_nameYesZone ID or name

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, idempotentHint=true. The description adds that only labels are updated and that records/TTL are not touched, which is useful but limited. It doesn't describe side effects like whether the RRSet must exist, permission requirements, or response behavior. The description adds some context beyond annotations but not rich behavioral detail.

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 sentence that front-loads the main action and immediately clarifies scope. It contains no filler and every word adds 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?

Given the simplicity of the tool (update labels) and the completeness of the schema, the description adequately covers what an agent needs to decide to use it and what it does. It explains that records and TTL are managed separately, preventing misuse. There's no output schema, but the description doesn't need to explain return values. It could mention that labels are optional in the schema, but that's not essential 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 description coverage is 100%, so the schema fully documents each parameter: name, type, labels, and id_or_name. The description does not add any additional meaning about the parameters themselves. Per the rubric, baseline 3 is appropriate when schema coverage is high and the description contributes no extra parameter semantics.

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 clearly states the action: 'Update an RRSet's labels.' It specifies the resource (RRSet) and the specific aspect (labels), which distinguishes it from other RRSet-related tools like record management or TTL changes. The phrase 'Records and TTL are managed via dedicated action tools' further clarifies its narrow scope.

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 implicitly indicates when to use this tool: when you need to update labels only, and points out that records and TTL are handled elsewhere. It doesn't name the specific alternative tools, but the context is clear. This provides adequate usage guidance, though naming the tools would make it more explicit.

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

hetzner_update_zone_rrset_recordsUpdate DNS Zone RRSet Record CommentsA
Idempotent

Update the comment on existing records in an RRSet (matched by value). The comment field is always sent — use an empty string to clear.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesRRSet name
typeYesDNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)
recordsYesRecords to update
id_or_nameYesZone ID or name

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate this is a non-read-only, idempotent, non-destructive mutation. The description adds behavior beyond that: records are matched by existing value, only the comment field is affected, and an empty string clears the comment. This gives the agent useful expectations about what the operation changes.

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, information-dense sentences. The core behavior is stated first, and the important always-sent/clearing nuance is included without redundancy or 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 focused comment-update operation with fully documented schema parameters, the description is complete enough for an agent to understand the operation, matching semantics, and clearing behavior. It does not describe response/return values, but no output schema exists and the operation is narrow enough that this is a minor 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%, so the schema already documents all parameters and their semantics. The description reinforces the value-matching behavior and the empty-string-to-clear rule, but does not add substantial 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 uses a specific verb ('Update') and resource ('comment on existing records in an RRSet'), and critically adds the matching criterion 'matched by value', which distinguishes it from related siblings like set_zone_rrset_records, add_zone_rrset_records, and remove_zone_rrset_records. An agent can tell exactly what this tool does and what it does not do.

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 clear usage context: it targets existing records matched by value, and it explains that the comment field is always sent, with an empty string to clear. It does not explicitly name when-not-to-use alternatives, but the 'existing records' and 'comment only' framing makes the intended scope clear enough.

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

hetzner_wait_for_actionWait for ActionA
Read-onlyIdempotent

Wait for a resource action to reach success or error and return its full details. The timeout includes API requests and rate-limit delays.

ParametersJSON Schema
NameRequiredDescriptionDefault
domainYesResource domain owning the action
timeoutNoMaximum wait in seconds, including requests and rate-limit delays (default 300, max 3600)
action_idYesAction ID to wait for
resource_idYesResource ID owning the action

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful context about what the timeout covers (API requests and rate-limit delays), but says nothing about what happens on timeout expiry or the return shape.

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, zero filler, and the core purpose is front-loaded ahead of the timeout caveat. Every clause earns its place.

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's claim that it returns 'full details' is left unelaborated, and it omits what happens when the wait times out or errors. For a blocking/polling tool whose timeout behavior is the main risk, this leaves a meaningful 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%, with every parameter including domain, resource_id, action_id, and timeout documented in the schema itself. The description's note on timeout semantics largely restates the schema's timeout description, so it adds little beyond the 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 (wait) and resource (a resource action) plus the terminal conditions (success or error) and that it returns full details. Clear enough that an agent can distinguish it from the many list_*_actions siblings, though it never names an alternative tool explicitly.

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

Usage Guidelines3/5

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

Usage is implied: this is a polling tool you call after triggering an async action. There is no explicit when-to-use/when-not guidance, no mention of prerequisites, and no pointer to alternatives such as the list_*_actions tools.

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. 40 tool updatesv3.0.0
    • Changedhetzner_change_dns_ptr2 fields changed
      • removedInput schema / properties / dns_ptr / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / dns_ptr / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedhetzner_change_floating_ip_rdns2 fields changed
      • removedInput schema / properties / dns_ptr / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / dns_ptr / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedhetzner_change_lb_dns_ptr2 fields changed
      • removedInput schema / properties / dns_ptr / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / dns_ptr / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedhetzner_change_primary_ip_rdns2 fields changed
      • removedInput schema / properties / dns_ptr / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedInput schema / properties / dns_ptr / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedhetzner_create_network1 field changed
      • addedInput schema / properties / expose_routes_to_vswitch
        Added value: +{
        +  "description": "Whether to expose routes to the vSwitch",
        +  "type": "boolean"
        +}
    • Changedhetzner_create_server2 fields changed
      • removedInput schema / properties / ssh_keys / items / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "number"
        -  }
        -]
      • addedInput schema / properties / ssh_keys / items / type
        Added value: +[
        +  "string",
        +  "number"
        +]
    • Removedhetzner_get_datacenter
    • Changedhetzner_get_lb_metrics1 field changed
      • addedInput schema / properties / step
        Added value: +{
        +  "description": "Resolution of metric samples in seconds, e.g. 60",
        +  "exclusiveMinimum": 0,
        +  "type": "number"
        +}
    • Changedhetzner_get_pricing1 field changed
      • addedInput schema / properties / resource
        Added value: +{
        +  "description": "Resource category to return; omit for all prices",
        +  "enum": [
        +    "server_types",
        +    "load_balancer_types",
        +    "volume",
        +    "floating_ips",
        +    "primary_ips",
        +    "traffic",
        +    "image",
        +    "server_backup"
        +  ],
        +  "type": "string"
        +}
    • Changedhetzner_get_server_metrics1 field changed
      • addedInput schema / properties / step
        Added value: +{
        +  "description": "Resolution of metric samples in seconds, e.g. 60",
        +  "exclusiveMinimum": 0,
        +  "type": "number"
        +}
    • Changedhetzner_list_certificate_actions6 fields changed
      • addedInput schema / properties / sort / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field, e.g. \"id:asc\" or \"name:desc\""New value: +"Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
      • removedInput schema / properties / sort / type
        Removed value: -"string"
      • addedInput schema / properties / status / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / status / description
        Previous value: -"Filter by action status: comma-separated list of \"running\", \"success\", \"error\""New value: +"Filter by action status: \"running\", \"success\", or \"error\"; pass an array for multiple statuses"
      • removedInput schema / properties / status / type
        Removed value: -"string"
    • Changedhetzner_list_certificates1 field changed
      • addedInput schema / properties / sort
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
        +}
    • Removedhetzner_list_datacenters
    • Changedhetzner_list_firewall_actions6 fields changed
      • addedInput schema / properties / sort / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field, e.g. \"id:asc\" or \"name:desc\""New value: +"Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
      • removedInput schema / properties / sort / type
        Removed value: -"string"
      • addedInput schema / properties / status / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / status / description
        Previous value: -"Filter by action status: comma-separated list of \"running\", \"success\", \"error\""New value: +"Filter by action status: \"running\", \"success\", or \"error\"; pass an array for multiple statuses"
      • removedInput schema / properties / status / type
        Removed value: -"string"
    • Changedhetzner_list_firewalls1 field changed
      • addedInput schema / properties / sort
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
        +}
    • Changedhetzner_list_floating_ip_actions6 fields changed
      • addedInput schema / properties / sort / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field, e.g. \"id:asc\" or \"name:desc\""New value: +"Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
      • removedInput schema / properties / sort / type
        Removed value: -"string"
      • addedInput schema / properties / status / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / status / description
        Previous value: -"Filter by action status: comma-separated list of \"running\", \"success\", \"error\""New value: +"Filter by action status: \"running\", \"success\", or \"error\"; pass an array for multiple statuses"
      • removedInput schema / properties / status / type
        Removed value: -"string"
    • Changedhetzner_list_floating_ips1 field changed
      • addedInput schema / properties / sort
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
        +}
    • Changedhetzner_list_image_actions6 fields changed
      • addedInput schema / properties / sort / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field, e.g. \"id:asc\" or \"name:desc\""New value: +"Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
      • removedInput schema / properties / sort / type
        Removed value: -"string"
      • addedInput schema / properties / status / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / status / description
        Previous value: -"Filter by action status: comma-separated list of \"running\", \"success\", \"error\""New value: +"Filter by action status: \"running\", \"success\", or \"error\"; pass an array for multiple statuses"
      • removedInput schema / properties / status / type
        Removed value: -"string"
    • Changedhetzner_list_images5 fields changed
      • addedInput schema / properties / bound_to
        Added value: +{
        +  "anyOf": [
        +    {
        +      "description": "Resource ID",
        +      "exclusiveMinimum": 0,
        +      "maximum": 9007199254740991,
        +      "type": "integer"
        +    },
        +    {
        +      "items": {
        +        "description": "Resource ID",
        +        "exclusiveMinimum": 0,
        +        "maximum": 9007199254740991,
        +        "type": "integer"
        +      },
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Filter backup images by linked server ID; pass an array for multiple servers"
        +}
      • addedInput schema / properties / include_deprecated
        Added value: +{
        +  "description": "Whether to include deprecated images",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / sort / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field, e.g. \"id:asc\" or \"name:desc\""New value: +"Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
      • removedInput schema / properties / sort / type
        Removed value: -"string"
    • Changedhetzner_list_load_balancer_actions6 fields changed
      • addedInput schema / properties / sort / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field, e.g. \"id:asc\" or \"name:desc\""New value: +"Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
      • removedInput schema / properties / sort / type
        Removed value: -"string"
      • addedInput schema / properties / status / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / status / description
        Previous value: -"Filter by action status: comma-separated list of \"running\", \"success\", \"error\""New value: +"Filter by action status: \"running\", \"success\", or \"error\"; pass an array for multiple statuses"
      • removedInput schema / properties / status / type
        Removed value: -"string"
    • Changedhetzner_list_load_balancers1 field changed
      • addedInput schema / properties / sort
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
        +}
    • Changedhetzner_list_network_actions6 fields changed
      • addedInput schema / properties / sort / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field, e.g. \"id:asc\" or \"name:desc\""New value: +"Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
      • removedInput schema / properties / sort / type
        Removed value: -"string"
      • addedInput schema / properties / status / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / status / description
        Previous value: -"Filter by action status: comma-separated list of \"running\", \"success\", \"error\""New value: +"Filter by action status: \"running\", \"success\", or \"error\"; pass an array for multiple statuses"
      • removedInput schema / properties / status / type
        Removed value: -"string"
    • Addedhetzner_list_network_members
    • Changedhetzner_list_networks1 field changed
      • addedInput schema / properties / sort
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
        +}
    • Changedhetzner_list_placement_groups1 field changed
      • addedInput schema / properties / sort
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
        +}
    • Changedhetzner_list_primary_ip_actions6 fields changed
      • addedInput schema / properties / sort / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field, e.g. \"id:asc\" or \"name:desc\""New value: +"Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
      • removedInput schema / properties / sort / type
        Removed value: -"string"
      • addedInput schema / properties / status / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / status / description
        Previous value: -"Filter by action status: comma-separated list of \"running\", \"success\", \"error\""New value: +"Filter by action status: \"running\", \"success\", or \"error\"; pass an array for multiple statuses"
      • removedInput schema / properties / status / type
        Removed value: -"string"
    • Changedhetzner_list_primary_ips1 field changed
      • addedInput schema / properties / sort
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
        +}
    • Changedhetzner_list_server_actions6 fields changed
      • addedInput schema / properties / sort / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field, e.g. \"id:asc\" or \"name:desc\""New value: +"Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
      • removedInput schema / properties / sort / type
        Removed value: -"string"
      • addedInput schema / properties / status / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / status / description
        Previous value: -"Filter by action status: comma-separated list of \"running\", \"success\", \"error\""New value: +"Filter by action status: \"running\", \"success\", or \"error\"; pass an array for multiple statuses"
      • removedInput schema / properties / status / type
        Removed value: -"string"
    • Changedhetzner_list_servers1 field changed
      • addedInput schema / properties / sort
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
        +}
    • Changedhetzner_list_ssh_keys1 field changed
      • addedInput schema / properties / sort
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
        +}
    • Changedhetzner_list_storage_box_actions6 fields changed
      • addedInput schema / properties / sort / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field, e.g. \"id:asc\" or \"name:desc\""New value: +"Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
      • removedInput schema / properties / sort / type
        Removed value: -"string"
      • addedInput schema / properties / status / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / status / description
        Previous value: -"Filter by action status: comma-separated list of \"running\", \"success\", \"error\""New value: +"Filter by action status: \"running\", \"success\", or \"error\"; pass an array for multiple statuses"
      • removedInput schema / properties / status / type
        Removed value: -"string"
    • Changedhetzner_list_storage_box_snapshots3 fields changed
      • addedInput schema / properties / sort / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field, e.g. \"id:asc\" or \"name:desc\""New value: +"Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
      • removedInput schema / properties / sort / type
        Removed value: -"string"
    • Changedhetzner_list_storage_box_subaccounts3 fields changed
      • addedInput schema / properties / sort / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field, e.g. \"id:asc\" or \"name:desc\""New value: +"Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
      • removedInput schema / properties / sort / type
        Removed value: -"string"
    • Changedhetzner_list_storage_boxes3 fields changed
      • addedInput schema / properties / sort / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field, e.g. \"id:asc\" or \"name:desc\""New value: +"Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
      • removedInput schema / properties / sort / type
        Removed value: -"string"
    • Changedhetzner_list_volume_actions6 fields changed
      • addedInput schema / properties / sort / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field, e.g. \"id:asc\" or \"name:desc\""New value: +"Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
      • removedInput schema / properties / sort / type
        Removed value: -"string"
      • addedInput schema / properties / status / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / status / description
        Previous value: -"Filter by action status: comma-separated list of \"running\", \"success\", \"error\""New value: +"Filter by action status: \"running\", \"success\", or \"error\"; pass an array for multiple statuses"
      • removedInput schema / properties / status / type
        Removed value: -"string"
    • Changedhetzner_list_volumes1 field changed
      • addedInput schema / properties / sort
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  ],
        +  "description": "Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
        +}
    • Changedhetzner_list_zone_actions6 fields changed
      • addedInput schema / properties / sort / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field, e.g. \"id:asc\" or \"name:desc\""New value: +"Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
      • removedInput schema / properties / sort / type
        Removed value: -"string"
      • addedInput schema / properties / status / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / status / description
        Previous value: -"Filter by action status: comma-separated list of \"running\", \"success\", \"error\""New value: +"Filter by action status: \"running\", \"success\", or \"error\"; pass an array for multiple statuses"
      • removedInput schema / properties / status / type
        Removed value: -"string"
    • Changedhetzner_list_zone_rrsets3 fields changed
      • addedInput schema / properties / sort / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field, e.g. \"id:asc\" or \"name:desc\""New value: +"Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
      • removedInput schema / properties / sort / type
        Removed value: -"string"
    • Changedhetzner_list_zones3 fields changed
      • addedInput schema / properties / sort / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  }
        +]
      • changedInput schema / properties / sort / description
        Previous value: -"Sort field, e.g. \"id:asc\" or \"name:desc\""New value: +"Sort field, e.g. \"id:asc\" or \"name:desc\"; pass an array for multiple sort fields"
      • removedInput schema / properties / sort / type
        Removed value: -"string"
    • Addedhetzner_wait_for_action
  2. 12 tool updatesv2.5.0
    • Changedhetzner_add_zone_rrset_records1 field changed
      • addedInput schema / properties / name / pattern
        Added value: +"^[^/\\s]+$"
    • Changedhetzner_change_zone_rrset_protection1 field changed
      • addedInput schema / properties / name / pattern
        Added value: +"^[^/\\s]+$"
    • Changedhetzner_change_zone_rrset_ttl1 field changed
      • addedInput schema / properties / name / pattern
        Added value: +"^[^/\\s]+$"
    • Changedhetzner_create_primary_ip3 fields changed
      • addedInput schema / properties / assignee_id
        Added value: +{
        +  "description": "Server ID to assign the primary IP to (create-and-assign in one call)",
        +  "exclusiveMinimum": 0,
        +  "maximum": 9007199254740991,
        +  "type": "integer"
        +}
      • removedInput schema / properties / datacenter
        Removed value: -{
        -  "description": "Datacenter name (e.g. \"fsn1-dc14\")",
        -  "type": "string"
        -}
      • addedInput schema / properties / location
        Added value: +{
        +  "description": "Location name (e.g. \"fsn1\", \"nbg1\", \"hel1\")",
        +  "type": "string"
        +}
    • Changedhetzner_create_server2 fields changed
      • changedInput schema / properties / automount / description
        Previous value: -"Auto-mount volumes after attach"New value: +"Auto-mount the volumes passed in \"volumes\" after attach"
      • addedInput schema / properties / volumes
        Added value: +{
        +  "description": "Volume IDs to attach at creation",
        +  "items": {
        +    "maximum": 9007199254740991,
        +    "minimum": -9007199254740991,
        +    "type": "integer"
        +  },
        +  "type": "array"
        +}
    • Changedhetzner_delete_zone_rrset1 field changed
      • addedInput schema / properties / name / pattern
        Added value: +"^[^/\\s]+$"
    • Changedhetzner_get_zone_rrset1 field changed
      • addedInput schema / properties / name / pattern
        Added value: +"^[^/\\s]+$"
    • Changedhetzner_list_server_actions2 fields changed
      • addedInput schema / properties / sort
        Added value: +{
        +  "description": "Sort field, e.g. \"id:asc\" or \"name:desc\"",
        +  "type": "string"
        +}
      • addedInput schema / properties / status
        Added value: +{
        +  "description": "Filter by action status: comma-separated list of \"running\", \"success\", \"error\"",
        +  "type": "string"
        +}
    • Changedhetzner_remove_zone_rrset_records1 field changed
      • addedInput schema / properties / name / pattern
        Added value: +"^[^/\\s]+$"
    • Changedhetzner_set_zone_rrset_records1 field changed
      • addedInput schema / properties / name / pattern
        Added value: +"^[^/\\s]+$"
    • Changedhetzner_update_zone_rrset1 field changed
      • addedInput schema / properties / name / pattern
        Added value: +"^[^/\\s]+$"
    • Changedhetzner_update_zone_rrset_records1 field changed
      • addedInput schema / properties / name / pattern
        Added value: +"^[^/\\s]+$"
  3. 29 tool updatesv2.3.1
    • Addedhetzner_change_storage_box_protection
    • Addedhetzner_change_storage_box_subaccount_home_directory
    • Addedhetzner_change_storage_box_type
    • Addedhetzner_create_storage_box
    • Addedhetzner_create_storage_box_snapshot
    • Addedhetzner_create_storage_box_subaccount
    • Addedhetzner_delete_storage_box
    • Addedhetzner_delete_storage_box_snapshot
    • Addedhetzner_delete_storage_box_subaccount
    • Addedhetzner_disable_storage_box_snapshot_plan
    • Addedhetzner_enable_storage_box_snapshot_plan
    • Addedhetzner_get_storage_box
    • Addedhetzner_get_storage_box_snapshot
    • Addedhetzner_get_storage_box_subaccount
    • Addedhetzner_get_storage_box_type
    • Addedhetzner_list_storage_box_actions
    • Addedhetzner_list_storage_box_folders
    • Addedhetzner_list_storage_box_snapshots
    • Addedhetzner_list_storage_box_subaccounts
    • Addedhetzner_list_storage_box_types
    • Addedhetzner_list_storage_boxes
    • Addedhetzner_reset_storage_box_password
    • Addedhetzner_reset_storage_box_subaccount_password
    • Addedhetzner_rollback_storage_box_snapshot
    • Addedhetzner_update_storage_box
    • Addedhetzner_update_storage_box_access_settings
    • Addedhetzner_update_storage_box_snapshot
    • Addedhetzner_update_storage_box_subaccount
    • Addedhetzner_update_storage_box_subaccount_access_settings
  4. 156 tool updatesv2.2.0
    • First observedhetzner_add_lb_service
    • First observedhetzner_add_lb_target
    • First observedhetzner_add_route
    • First observedhetzner_add_server_to_placement_group
    • First observedhetzner_add_subnet
    • First observedhetzner_add_zone_rrset_records
    • First observedhetzner_apply_firewall
    • First observedhetzner_assign_floating_ip
    • First observedhetzner_assign_primary_ip
    • First observedhetzner_attach_iso
    • First observedhetzner_attach_lb_to_network
    • First observedhetzner_attach_server_to_network
    • First observedhetzner_attach_volume
    • First observedhetzner_change_alias_ips
    • First observedhetzner_change_dns_ptr
    • First observedhetzner_change_floating_ip_protection
    • First observedhetzner_change_floating_ip_rdns
    • First observedhetzner_change_image_protection
    • First observedhetzner_change_ip_range
    • First observedhetzner_change_lb_algorithm
    • First observedhetzner_change_lb_dns_ptr
    • First observedhetzner_change_lb_type
    • First observedhetzner_change_load_balancer_protection
    • First observedhetzner_change_network_protection
    • First observedhetzner_change_primary_ip_protection
    • First observedhetzner_change_primary_ip_rdns
    • First observedhetzner_change_server_protection
    • First observedhetzner_change_volume_protection
    • First observedhetzner_change_zone_primary_nameservers
    • First observedhetzner_change_zone_protection
    • First observedhetzner_change_zone_rrset_protection
    • First observedhetzner_change_zone_rrset_ttl
    • First observedhetzner_change_zone_ttl
    • First observedhetzner_create_certificate
    • First observedhetzner_create_firewall
    • First observedhetzner_create_floating_ip
    • First observedhetzner_create_image
    • First observedhetzner_create_load_balancer
    • First observedhetzner_create_network
    • First observedhetzner_create_placement_group
    • First observedhetzner_create_primary_ip
    • First observedhetzner_create_server
    • First observedhetzner_create_ssh_key
    • First observedhetzner_create_volume
    • First observedhetzner_create_zone
    • First observedhetzner_create_zone_rrset
    • First observedhetzner_delete_certificate
    • First observedhetzner_delete_firewall
    • First observedhetzner_delete_floating_ip
    • First observedhetzner_delete_image
    • First observedhetzner_delete_lb_service
    • First observedhetzner_delete_load_balancer
    • First observedhetzner_delete_network
    • First observedhetzner_delete_placement_group
    • First observedhetzner_delete_primary_ip
    • First observedhetzner_delete_route
    • First observedhetzner_delete_server
    • First observedhetzner_delete_ssh_key
    • First observedhetzner_delete_subnet
    • First observedhetzner_delete_volume
    • First observedhetzner_delete_zone
    • First observedhetzner_delete_zone_rrset
    • First observedhetzner_detach_iso
    • First observedhetzner_detach_lb_from_network
    • First observedhetzner_detach_server_from_network
    • First observedhetzner_detach_volume
    • First observedhetzner_disable_backup
    • First observedhetzner_disable_lb_public_interface
    • First observedhetzner_disable_rescue
    • First observedhetzner_enable_backup
    • First observedhetzner_enable_lb_public_interface
    • First observedhetzner_enable_rescue
    • First observedhetzner_export_zonefile
    • First observedhetzner_get_certificate
    • First observedhetzner_get_datacenter
    • First observedhetzner_get_firewall
    • First observedhetzner_get_floating_ip
    • First observedhetzner_get_image
    • First observedhetzner_get_iso
    • First observedhetzner_get_lb_metrics
    • First observedhetzner_get_load_balancer
    • First observedhetzner_get_location
    • First observedhetzner_get_network
    • First observedhetzner_get_placement_group
    • First observedhetzner_get_pricing
    • First observedhetzner_get_primary_ip
    • First observedhetzner_get_server
    • First observedhetzner_get_server_metrics
    • First observedhetzner_get_server_type
    • First observedhetzner_get_ssh_key
    • First observedhetzner_get_volume
    • First observedhetzner_get_zone
    • First observedhetzner_get_zone_rrset
    • First observedhetzner_import_zonefile
    • First observedhetzner_list_certificate_actions
    • First observedhetzner_list_certificates
    • First observedhetzner_list_datacenters
    • First observedhetzner_list_firewall_actions
    • First observedhetzner_list_firewalls
    • First observedhetzner_list_floating_ip_actions
    • First observedhetzner_list_floating_ips
    • First observedhetzner_list_image_actions
    • First observedhetzner_list_images
    • First observedhetzner_list_isos
    • First observedhetzner_list_lb_types
    • First observedhetzner_list_load_balancer_actions
    • First observedhetzner_list_load_balancers
    • First observedhetzner_list_locations
    • First observedhetzner_list_network_actions
    • First observedhetzner_list_networks
    • First observedhetzner_list_placement_groups
    • First observedhetzner_list_primary_ip_actions
    • First observedhetzner_list_primary_ips
    • First observedhetzner_list_server_actions
    • First observedhetzner_list_server_types
    • First observedhetzner_list_servers
    • First observedhetzner_list_ssh_keys
    • First observedhetzner_list_volume_actions
    • First observedhetzner_list_volumes
    • First observedhetzner_list_zone_actions
    • First observedhetzner_list_zone_rrsets
    • First observedhetzner_list_zones
    • First observedhetzner_power_off
    • First observedhetzner_power_on
    • First observedhetzner_reboot
    • First observedhetzner_rebuild_server
    • First observedhetzner_remove_firewall
    • First observedhetzner_remove_lb_target
    • First observedhetzner_remove_server_from_placement_group
    • First observedhetzner_remove_zone_rrset_records
    • First observedhetzner_request_console
    • First observedhetzner_reset
    • First observedhetzner_reset_server_password
    • First observedhetzner_resize_server
    • First observedhetzner_resize_volume
    • First observedhetzner_retry_certificate
    • First observedhetzner_set_firewall_rules
    • First observedhetzner_set_zone_rrset_records
    • First observedhetzner_shutdown
    • First observedhetzner_unassign_floating_ip
    • First observedhetzner_unassign_primary_ip
    • First observedhetzner_update_certificate
    • First observedhetzner_update_firewall
    • First observedhetzner_update_floating_ip
    • First observedhetzner_update_image
    • First observedhetzner_update_lb_service
    • First observedhetzner_update_load_balancer
    • First observedhetzner_update_network
    • First observedhetzner_update_placement_group
    • First observedhetzner_update_primary_ip
    • First observedhetzner_update_server
    • First observedhetzner_update_ssh_key
    • First observedhetzner_update_volume
    • First observedhetzner_update_zone
    • First observedhetzner_update_zone_rrset
    • First observedhetzner_update_zone_rrset_records

TDQS

B3.3/5.0

Scored across 185 tools

Disambiguation3/5

The tool set is highly systematic but very large; many tools share the same action verb across different resources (e.g., change_*_protection, list_*_actions) and several server power tools (power_off, shutdown, reset, reboot) have subtle distinctions. Descriptions clarify boundaries, but the sheer volume and repeated patterns increase the risk of misselection.

Naming Consistency4/5

Names consistently use the hetzner_ prefix and snake_case verb_noun structure (e.g., create_server, delete_volume, list_zones). Minor inconsistencies exist: 'lb' is sometimes abbreviated (get_lb_metrics, list_lb_types) while other tools use 'load_balancer', and power actions are verb-only (power_on, reboot).

Tool Count1/5

185 tools is far beyond the recommended 3-15 range and exceeds the 50+ threshold for extreme mismatch, making it impractical for an agent to navigate efficiently despite the API's breadth.

Completeness5/5

The surface covers servers, storage boxes, DNS, networking, load balancers, and more with full CRUD and action coverage, including edge operations like rescue mode, console access, zonefile import/export, and snapshot plans. No obvious gaps in lifecycle operations.

Maintenance

ActivityMaintained
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A Model Context Protocol server that allows language models to manage Hetzner Cloud resources through structured functions, including servers, volumes, firewalls, and SSH keys.
    30
    145
    MIT
  • A
    license
    C
    quality
    D
    maintenance
    A Model Context Protocol server for the Hetzner Cloud API that enables natural language management of cloud infrastructure. Users can list, create, and modify servers, networks, volumes, and load balancers through MCP-compatible clients.
    67
    477 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Open-source MCP server for managing Hetzner Cloud infrastructure with two management layers: * Layer 1 — Hetzner Cloud API (35 tools): Server power control, metrics, snapshots, backups, firewalls, DNS zones and records, rescue mode, server rebuild and rescale. Works even when the server OS is unresponsive. * Layer 2 — SSH (25 tools): Service management (systemd), Nginx config and reload,
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Model Context Protocol server for full Hetzner Cloud + Storage API automation. Exposes all official Hetzner operations as MCP tools so AI agents can manage servers, networking, load balancers, firewalls, volumes, DNS zones, and storage boxes from one server.
    1
    MIT