# io.github.lazyants/hetzner (npm · @lazyants/hetzner-mcp-server)

MCP server for the Hetzner Cloud API — servers, networks, volumes, firewalls, and more.

- Trust score: 78/100 (medium)
- Change this week: +25
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-04

## Components

- npm · `@lazyants/hetzner-mcp-server`: 78/100 (this document), [markdown](https://verifymcp.io/servers/lazyants-hetzner/lazyants-hetzner-mcp-server.md), [page](https://verifymcp.io/servers/lazyants-hetzner/lazyants-hetzner-mcp-server)

## Channel facts

- Registry: `npm`
- Package: `@lazyants/hetzner-mcp-server`
- Version: `2.3.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-04.

- **Supply Chain Security**: 83/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known medium-severity CVE affects hono 4.12.33, reached via @modelcontextprotocol/sdk > hono. A fixed version is available.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (107 of 108), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 84/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to lazyants/hetzner-mcp-server).
  - License check failed: the license (FSL-1.1-MIT) isn't a recognized OSI-approved license.
  - Actively maintained (last published 42 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 85/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 13206 tokens (~71/item across 186 items; 185 tools + 1 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add lazyants-hetzner -- npx -y @lazyants/hetzner-mcp-server
```

### Codex

```bash
codex mcp add lazyants-hetzner -- npx -y @lazyants/hetzner-mcp-server
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "lazyants-hetzner": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@lazyants/hetzner-mcp-server"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add lazyants-hetzner --command npx --arg -y --arg @lazyants/hetzner-mcp-server
```

### Hermes

```yaml
mcp_servers:
  lazyants-hetzner:
    command: "npx"
    args: ["-y", "@lazyants/hetzner-mcp-server"]
```

### Other

```json
{
  "mcpServers": {
    "lazyants-hetzner": {
      "command": "npx",
      "args": [
        "-y",
        "@lazyants/hetzner-mcp-server"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-04 (score 78, 0)

- [security regression] CVE-2026-69207 affects this package: medium
- [security regression] Known CVEs: partial → fail

### 2026-08-02 (score 78, +47)

- [security improvement] Install scripts: unverified → pass
- [security improvement] Provenance: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] The attested source repository moved: lazyants/hetzner-mcp-server
- [functional regression] License: unverified → fail
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] Stability: unverified → 0.20
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Maintenance: unverified → pass
- [functional] Licence: FSL-1.1-MIT

### 2026-08-01 (score 31, +5)

- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] MCP protocol: unverified → pass

### 2026-07-31 (score 26, −27)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-27 (score 53)

First indexed and scored.

## MCP tools (185)

### `hetzner_list_servers` (~97 tokens)

List Servers

List all servers in the project, with optional filtering by name, label, or status.

Input parameters:

- `label_selector` (string): Label filter, e.g. "env=prod,tier=web"
- `name` (string): Filter by server name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)
- `status` (string): Filter by server status

### `hetzner_get_server` (~29 tokens)

Get Server

Get details of a specific server by ID.

Input parameters:

- `id` (integer, required): Server ID

### `hetzner_create_server` (~244 tokens)

Create Server

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

Input parameters:

- `automount` (boolean): Auto-mount volumes after attach
- `firewalls` (array): Firewalls to apply to the server
- `image` (string, required): Image name or ID to use (e.g. "ubuntu-22.04", "debian-12")
- `labels` (object): Labels as key-value pairs
- `location` (string): Location name (e.g. "fsn1", "nbg1", "hel1")
- `name` (string, required): Name of the server
- `networks` (array): Network IDs to attach the server to
- `placement_group` (number): Placement group ID
- `public_net` (object): Public network configuration
- `server_type` (string, required): Server type name or ID (e.g. "cx22", "cpx11")
- `ssh_keys` (array): SSH key names or IDs to inject
- `start_after_create` (boolean): Start server after creation (default: true)
- `user_data` (string): Cloud-init user data (base64 or plain text)

### `hetzner_update_server` (~50 tokens)

Update Server

Update a server's name or labels.

Input parameters:

- `id` (integer, required): Server ID
- `labels` (object): Labels as key-value pairs
- `name` (string): New server name

### `hetzner_delete_server` (~35 tokens)

Delete Server

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

Input parameters:

- `id` (integer, required): Server ID

### `hetzner_power_on` (~29 tokens)

Power On Server

Start a stopped server by powering it on.

Input parameters:

- `id` (integer, required): Server ID

### `hetzner_power_off` (~35 tokens)

Power Off Server

Force power off a server immediately. This is like pulling the power cord.

Input parameters:

- `id` (integer, required): Server ID

### `hetzner_reboot` (~34 tokens)

Reboot Server

Send an ACPI reboot signal to the server for a soft reboot.

Input parameters:

- `id` (integer, required): Server ID

### `hetzner_reset` (~34 tokens)

Reset Server

Perform a hard reset on the server, equivalent to pressing the reset button.

Input parameters:

- `id` (integer, required): Server ID

### `hetzner_shutdown` (~31 tokens)

Shutdown Server

Send an ACPI shutdown signal for a graceful OS shutdown.

Input parameters:

- `id` (integer, required): Server ID

### `hetzner_rebuild_server` (~75 tokens)

Rebuild Server

Rebuild a server from an image, wiping all data on the server.

Input parameters:

- `id` (integer, required): Server ID
- `image` (string, required): Image name or ID to rebuild from
- `user_data` (string): Cloud-init user data to apply to the rebuilt server. Overrides the value set at creation.

### `hetzner_resize_server` (~75 tokens)

Resize Server

Change the server type. The server will be stopped and migrated if needed.

Input parameters:

- `id` (integer, required): Server ID
- `server_type` (string, required): Target server type name (e.g. "cx22")
- `upgrade_disk` (boolean, required): Whether to upgrade the disk size (cannot be downgraded later)

### `hetzner_enable_rescue` (~65 tokens)

Enable Rescue Mode

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

Input parameters:

- `id` (integer, required): Server ID
- `ssh_keys` (array): SSH key IDs to inject into rescue system
- `type` (string): Rescue system type

### `hetzner_disable_rescue` (~35 tokens)

Disable Rescue Mode

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

Input parameters:

- `id` (integer, required): Server ID

### `hetzner_get_server_metrics` (~129 tokens)

Get Server Metrics

Retrieve time series metrics (CPU, disk, network) for a server over a time range.

Input parameters:

- `end` (string, required): End of period, ISO 8601 timestamp (e.g. "2025-01-02T00:00:00Z")
- `id` (integer, required): Server ID
- `start` (string, required): Start of period, ISO 8601 timestamp (e.g. "2025-01-01T00:00:00Z")
- `type` (string, required): Comma-separated metric types: "cpu", "disk", "network"

### `hetzner_list_server_actions` (~61 tokens)

List Server Actions

List all actions for a specific server, such as power changes and rebuilds.

Input parameters:

- `id` (integer, required): Server ID
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)

### `hetzner_change_server_protection` (~70 tokens)

Change Server Protection

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

Input parameters:

- `delete` (boolean): If true, prevents the server from being deleted
- `id` (integer, required): Server ID
- `rebuild` (boolean): If true, prevents the server from being rebuilt

### `hetzner_request_console` (~45 tokens)

Request Server Console

Request a noVNC WebSocket URL and credentials to access the server console. The URL is valid for a limited time.

Input parameters:

- `id` (integer, required): Server ID

### `hetzner_enable_backup` (~46 tokens)

Enable Server Backup

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

Input parameters:

- `id` (integer, required): Server ID

### `hetzner_disable_backup` (~33 tokens)

Disable Server Backup

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

Input parameters:

- `id` (integer, required): Server ID

### `hetzner_change_alias_ips` (~91 tokens)

Change Server Alias IPs

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

Input parameters:

- `alias_ips` (array, required): Full list of alias IPs to set on the network (replaces existing). Pass [] to clear.
- `id` (integer, required): Server ID
- `network` (integer, required): ID of the network the server is attached to

### `hetzner_change_dns_ptr` (~94 tokens)

Change Server Reverse DNS

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.

Input parameters:

- `dns_ptr` (required): Reverse DNS PTR record value, or null to reset to the default
- `id` (integer, required): Server ID
- `ip` (string, required): Public IPv4 or IPv6 address of the server to set the reverse DNS entry for

### `hetzner_attach_server_to_network` (~134 tokens)

Attach Server to Network

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

Input parameters:

- `alias_ips` (array): Additional alias IPs to assign the server on the network
- `id` (integer, required): Server ID
- `ip` (string): Private IP to assign the server in the network (within the network IP range)
- `ip_range` (string): Subnet IP range (CIDR) to attach to, e.g. "10.0.1.0/24"
- `network` (integer, required): ID of the network to attach the server to

### `hetzner_detach_server_from_network` (~56 tokens)

Detach Server from Network

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

Input parameters:

- `id` (integer, required): Server ID
- `network` (integer, required): ID of the network to detach the server from

### `hetzner_add_server_to_placement_group` (~62 tokens)

Add Server to Placement Group

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

Input parameters:

- `id` (integer, required): Server ID
- `placement_group` (integer, required): ID of the placement group to add the server to

### `hetzner_remove_server_from_placement_group` (~32 tokens)

Remove Server from Placement Group

Remove a server from its placement group.

Input parameters:

- `id` (integer, required): Server ID

### `hetzner_reset_server_password` (~45 tokens)

Reset Server Root Password

Reset the root password of a server. The server is rebooted and a new root password is returned in the result.

Input parameters:

- `id` (integer, required): Server ID

### `hetzner_list_images` (~138 tokens)

List Images

List all available images, including system, snapshot, and backup images.

Input parameters:

- `architecture` (string): Filter by CPU architecture
- `label_selector` (string): Label filter, e.g. "env=prod,tier=web"
- `name` (string): Filter by image name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)
- `sort` (string): Sort field, e.g. "id:asc" or "name:desc"
- `status` (string): Filter by image status
- `type` (string): Filter by image type

### `hetzner_get_image` (~29 tokens)

Get Image

Get details of a specific image by ID.

Input parameters:

- `id` (integer, required): Image ID

### `hetzner_update_image` (~68 tokens)

Update Image

Update an image's description, type, or labels.

Input parameters:

- `description` (string): New image description
- `id` (integer, required): Image ID
- `labels` (object): Labels as key-value pairs
- `type` (string): Image type (only snapshot allowed for conversion)

### `hetzner_delete_image` (~29 tokens)

Delete Image

Permanently delete a snapshot or backup image.

Input parameters:

- `id` (integer, required): Image ID

### `hetzner_create_image` (~69 tokens)

Create Image

Create a snapshot image from an existing server.

Input parameters:

- `description` (string): Image description
- `labels` (object): Labels as key-value pairs
- `server_id` (integer, required): Server ID to create the image from
- `type` (string): Image type (default: snapshot)

### `hetzner_change_image_protection` (~55 tokens)

Change Image Protection

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

Input parameters:

- `delete` (boolean): If true, prevents the image from being deleted
- `id` (integer, required): Image ID

### `hetzner_list_image_actions` (~109 tokens)

List Image Actions

List all actions performed on a specific image, such as snapshot creation and protection changes.

Input parameters:

- `id` (integer, required): Image ID
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)
- `sort` (string): Sort field, e.g. "id:asc" or "name:desc"
- `status` (string): Filter by action status: comma-separated list of "running", "success", "error"

### `hetzner_list_isos` (~68 tokens)

List ISOs

List all available ISO images for mounting on servers.

Input parameters:

- `architecture` (string): Filter by CPU architecture
- `name` (string): Filter by ISO name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)

### `hetzner_get_iso` (~30 tokens)

Get ISO

Get details of a specific ISO image by ID.

Input parameters:

- `id` (integer, required): ISO ID

### `hetzner_attach_iso` (~59 tokens)

Attach ISO to Server

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

Input parameters:

- `iso` (string, required): ISO name or ID to attach
- `server_id` (integer, required): Server ID to attach the ISO to

### `hetzner_detach_iso` (~49 tokens)

Detach ISO from Server

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

Input parameters:

- `server_id` (integer, required): Server ID to detach the ISO from

### `hetzner_list_placement_groups` (~79 tokens)

List Placement Groups

List all placement groups in the project.

Input parameters:

- `label_selector` (string): Label filter, e.g. "env=prod,tier=web"
- `name` (string): Filter by placement group name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)

### `hetzner_get_placement_group` (~33 tokens)

Get Placement Group

Get details of a specific placement group by ID.

Input parameters:

- `id` (integer, required): Placement group ID

### `hetzner_create_placement_group` (~59 tokens)

Create Placement Group

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

Input parameters:

- `labels` (object): Labels as key-value pairs
- `name` (string, required): Name of the placement group
- `type` (string, required): Placement group type

### `hetzner_update_placement_group` (~54 tokens)

Update Placement Group

Update a placement group's name or labels.

Input parameters:

- `id` (integer, required): Placement group ID
- `labels` (object): Labels as key-value pairs
- `name` (string): New placement group name

### `hetzner_delete_placement_group` (~37 tokens)

Delete Placement Group

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

Input parameters:

- `id` (integer, required): Placement group ID

### `hetzner_list_datacenters` (~96 tokens)

List Datacenters

Deprecated by Hetzner; /datacenters is removed after 2026-10-01 (HTTP 410). Use hetzner_list_server_types (locations[].available/recommended) and hetzner_list_locations instead.

Input parameters:

- `name` (string): Filter by datacenter name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)

### `hetzner_get_datacenter` (~69 tokens)

Get Datacenter

Deprecated by Hetzner; /datacenters is removed after 2026-10-01 (HTTP 410). Use hetzner_list_server_types (locations[].available/recommended) and hetzner_list_locations instead.

Input parameters:

- `id` (integer, required): Datacenter ID

### `hetzner_list_locations` (~57 tokens)

List Locations

List all available Hetzner Cloud locations (regions).

Input parameters:

- `name` (string): Filter by location name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)

### `hetzner_get_location` (~29 tokens)

Get Location

Get details of a specific location by ID.

Input parameters:

- `id` (integer, required): Location ID

### `hetzner_list_server_types` (~59 tokens)

List Server Types

List all available server types with their specs and pricing.

Input parameters:

- `name` (string): Filter by server type name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)

### `hetzner_get_server_type` (~35 tokens)

Get Server Type

Get details of a specific server type, including specs and pricing.

Input parameters:

- `id` (integer, required): Server type ID

### `hetzner_get_pricing` (~40 tokens)

Get Pricing

Get current prices for all Hetzner Cloud resources (servers, volumes, traffic, floating IPs, load balancers, and more).

### `hetzner_list_networks` (~83 tokens)

List Networks

List all networks in the project, with optional filtering by name or labels.

Input parameters:

- `label_selector` (string): Label filter, e.g. "env=prod,tier=web"
- `name` (string): Filter by name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)

### `hetzner_get_network` (~30 tokens)

Get Network

Get details of a specific network by its ID.

Input parameters:

- `id` (integer, required): Resource ID

### `hetzner_create_network` (~105 tokens)

Create Network

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

Input parameters:

- `ip_range` (string, required): IP range of the whole network, e.g. "10.0.0.0/8"
- `labels` (object): Labels as key-value pairs
- `name` (string, required): Name of the network
- `routes` (array): Array of routes to create
- `subnets` (array): Array of subnets to create

### `hetzner_update_network` (~80 tokens)

Update Network

Update properties of a network such as name, labels, or vSwitch route exposure.

Input parameters:

- `expose_routes_to_vswitch` (boolean): Whether to expose routes to the vSwitch
- `id` (integer, required): Resource ID
- `labels` (object): Labels as key-value pairs
- `name` (string): New name for the network

### `hetzner_delete_network` (~36 tokens)

Delete Network

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

Input parameters:

- `id` (integer, required): Resource ID

### `hetzner_add_subnet` (~92 tokens)

Add Subnet to Network

Add a subnet to an existing network.

Input parameters:

- `id` (integer, required): Resource ID
- `ip_range` (string): IP range of the subnet
- `network_zone` (string, required): Name of the network zone, e.g. "eu-central"
- `type` (string, required): Type of subnet
- `vswitch_id` (integer): ID of the vSwitch (required for vswitch type)

### `hetzner_delete_subnet` (~48 tokens)

Delete Subnet from Network

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

Input parameters:

- `id` (integer, required): Resource ID
- `ip_range` (string, required): IP range of the subnet to delete

### `hetzner_add_route` (~51 tokens)

Add Route to Network

Add a route to an existing network.

Input parameters:

- `destination` (string, required): Destination network of the route
- `gateway` (string, required): Gateway for the route
- `id` (integer, required): Resource ID

### `hetzner_delete_route` (~55 tokens)

Delete Route from Network

Remove a route from an existing network.

Input parameters:

- `destination` (string, required): Destination network of the route to delete
- `gateway` (string, required): Gateway of the route to delete
- `id` (integer, required): Resource ID

### `hetzner_change_ip_range` (~85 tokens)

Change Network IP Range

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

Input parameters:

- `id` (integer, required): Network ID
- `ip_range` (string, required): New IP range in CIDR notation (e.g. "10.0.0.0/8"). Must be a superset of the current range.

### `hetzner_change_network_protection` (~52 tokens)

Change Network Protection

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

Input parameters:

- `delete` (boolean): If true, prevents the network from being deleted
- `id` (integer, required): Network ID

### `hetzner_list_network_actions` (~108 tokens)

List Network Actions

List all actions performed on a specific network, such as subnet and route changes.

Input parameters:

- `id` (integer, required): Network ID
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)
- `sort` (string): Sort field, e.g. "id:asc" or "name:desc"
- `status` (string): Filter by action status: comma-separated list of "running", "success", "error"

### `hetzner_list_firewalls` (~84 tokens)

List Firewalls

List all firewalls in the project, with optional filtering by name or labels.

Input parameters:

- `label_selector` (string): Label filter, e.g. "env=prod,tier=web"
- `name` (string): Filter by name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)

### `hetzner_get_firewall` (~31 tokens)

Get Firewall

Get details of a specific firewall by its ID.

Input parameters:

- `id` (integer, required): Resource ID

### `hetzner_create_firewall` (~71 tokens)

Create Firewall

Create a new firewall with optional rules and resource assignments.

Input parameters:

- `apply_to` (array): Resources to apply the firewall to
- `labels` (object): Labels as key-value pairs
- `name` (string, required): Name of the firewall
- `rules` (array): Array of firewall rules

### `hetzner_update_firewall` (~52 tokens)

Update Firewall

Update a firewall name or labels.

Input parameters:

- `id` (integer, required): Resource ID
- `labels` (object): Labels as key-value pairs
- `name` (string): New name for the firewall

### `hetzner_delete_firewall` (~34 tokens)

Delete Firewall

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

Input parameters:

- `id` (integer, required): Resource ID

### `hetzner_set_firewall_rules` (~52 tokens)

Set Firewall Rules

Replace all rules of a firewall with a new set of rules.

Input parameters:

- `id` (integer, required): Resource ID
- `rules` (array, required): New set of firewall rules (replaces all existing)

### `hetzner_apply_firewall` (~47 tokens)

Apply Firewall to Resources

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

Input parameters:

- `apply_to` (array, required): Resources to apply the firewall to
- `id` (integer, required): Resource ID

### `hetzner_remove_firewall` (~47 tokens)

Remove Firewall from Resources

Remove a firewall from one or more servers or label selectors.

Input parameters:

- `id` (integer, required): Resource ID
- `remove_from` (array, required): Resources to remove the firewall from

### `hetzner_list_firewall_actions` (~110 tokens)

List Firewall Actions

List all actions performed on a specific firewall, such as rule and resource attachment changes.

Input parameters:

- `id` (integer, required): Firewall ID
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)
- `sort` (string): Sort field, e.g. "id:asc" or "name:desc"
- `status` (string): Filter by action status: comma-separated list of "running", "success", "error"

### `hetzner_list_load_balancers` (~86 tokens)

List Load Balancers

List all load balancers in the project, with optional filtering by name or labels.

Input parameters:

- `label_selector` (string): Label filter, e.g. "env=prod,tier=web"
- `name` (string): Filter by name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)

### `hetzner_get_load_balancer` (~34 tokens)

Get Load Balancer

Get details of a specific load balancer by its ID.

Input parameters:

- `id` (integer, required): Resource ID

### `hetzner_create_load_balancer` (~173 tokens)

Create Load Balancer

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

Input parameters:

- `algorithm` (object): Load balancing algorithm
- `labels` (object): Labels as key-value pairs
- `load_balancer_type` (string, required): Load balancer type name or ID
- `location` (string): Location name (e.g. "fsn1"), mutually exclusive with network_zone
- `name` (string, required): Name of the load balancer
- `network` (integer): Network ID to attach to
- `network_zone` (string): Network zone (e.g. "eu-central"), mutually exclusive with location
- `public_interface` (boolean): Enable the public interface
- `services` (array): Array of services
- `targets` (array): Array of targets

### `hetzner_update_load_balancer` (~57 tokens)

Update Load Balancer

Update a load balancer name or labels.

Input parameters:

- `id` (integer, required): Resource ID
- `labels` (object): Labels as key-value pairs
- `name` (string): New name for the load balancer

### `hetzner_delete_load_balancer` (~30 tokens)

Delete Load Balancer

Permanently delete a load balancer.

Input parameters:

- `id` (integer, required): Resource ID

### `hetzner_add_lb_target` (~92 tokens)

Add Load Balancer Target

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

Input parameters:

- `id` (integer, required): Resource ID
- `ip` (object): IP target
- `label_selector` (object): Label selector target
- `server` (object): Server target
- `type` (string, required): Target type
- `use_private_ip` (boolean): Use private IP for the target

### `hetzner_remove_lb_target` (~68 tokens)

Remove Load Balancer Target

Remove a target from a load balancer.

Input parameters:

- `id` (integer, required): Resource ID
- `ip` (object): IP target
- `label_selector` (object): Label selector target
- `server` (object): Server target
- `type` (string, required): Target type

### `hetzner_add_lb_service` (~115 tokens)

Add Load Balancer Service

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

Input parameters:

- `destination_port` (integer, required): Port traffic is forwarded to
- `health_check` (object): Health check configuration
- `http` (object): HTTP-specific service settings
- `id` (integer, required): Resource ID
- `listen_port` (integer, required): Port the load balancer listens on
- `protocol` (string, required): Service protocol: tcp, http, or https
- `proxyprotocol` (boolean): Enable PROXY protocol

### `hetzner_update_lb_service` (~109 tokens)

Update Load Balancer Service

Update an existing service on a load balancer.

Input parameters:

- `destination_port` (integer, required): Port traffic is forwarded to
- `health_check` (object): Health check configuration
- `http` (object): HTTP-specific service settings
- `id` (integer, required): Resource ID
- `listen_port` (integer, required): Port the load balancer listens on
- `protocol` (string, required): Service protocol: tcp, http, or https
- `proxyprotocol` (boolean): Enable PROXY protocol

### `hetzner_delete_lb_service` (~49 tokens)

Delete Load Balancer Service

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

Input parameters:

- `id` (integer, required): Resource ID
- `listen_port` (integer, required): Listen port of the service to delete

### `hetzner_change_lb_algorithm` (~40 tokens)

Change Load Balancer Algorithm

Change the balancing algorithm of a load balancer.

Input parameters:

- `id` (integer, required): Resource ID
- `type` (string, required): Algorithm type

### `hetzner_change_lb_type` (~51 tokens)

Change Load Balancer Type

Change the type (plan) of a load balancer.

Input parameters:

- `id` (integer, required): Resource ID
- `load_balancer_type` (string, required): New load balancer type name or ID

### `hetzner_attach_lb_to_network` (~90 tokens)

Attach Load Balancer to Network

Attach a load balancer to a network.

Input parameters:

- `id` (integer, required): Resource ID
- `ip` (string): IP address to assign in the network
- `ip_range` (string): Subnet IP range (CIDR) to attach to, e.g. "10.0.1.0/24"
- `network` (integer, required): Network ID to attach to

### `hetzner_detach_lb_from_network` (~45 tokens)

Detach Load Balancer from Network

Detach a load balancer from a network.

Input parameters:

- `id` (integer, required): Resource ID
- `network` (integer, required): Network ID to detach from

### `hetzner_get_lb_metrics` (~106 tokens)

Get Load Balancer Metrics

Get metrics for a load balancer over a specified time range.

Input parameters:

- `end` (string, required): End of the time range in ISO 8601 format
- `id` (integer, required): Resource ID
- `start` (string, required): Start of the time range in ISO 8601 format
- `type` (string, required): Metric type, e.g. "open_connections", "connections_per_second", "requests_per_second", "bandwidth.in", "bandwidth.out"

### `hetzner_list_lb_types` (~59 tokens)

List Load Balancer Types

List all available load balancer types with pricing and limits.

Input parameters:

- `name` (string): Filter by type name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)

### `hetzner_change_load_balancer_protection` (~60 tokens)

Change Load Balancer Protection

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

Input parameters:

- `delete` (boolean): If true, prevents the load balancer from being deleted
- `id` (integer, required): Load Balancer ID

### `hetzner_list_load_balancer_actions` (~115 tokens)

List Load Balancer Actions

List all actions performed on a specific load balancer, such as service changes and target attachments.

Input parameters:

- `id` (integer, required): Load Balancer ID
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)
- `sort` (string): Sort field, e.g. "id:asc" or "name:desc"
- `status` (string): Filter by action status: comma-separated list of "running", "success", "error"

### `hetzner_enable_lb_public_interface` (~44 tokens)

Enable Load Balancer Public Interface

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

Input parameters:

- `id` (integer, required): Load Balancer ID

### `hetzner_disable_lb_public_interface` (~40 tokens)

Disable Load Balancer Public Interface

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

Input parameters:

- `id` (integer, required): Load Balancer ID

### `hetzner_change_lb_dns_ptr` (~97 tokens)

Change Load Balancer Reverse DNS

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.

Input parameters:

- `dns_ptr` (required): Reverse DNS PTR record value, or null to reset to the default
- `id` (integer, required): Load Balancer ID
- `ip` (string, required): Public IPv4 or IPv6 address of the load balancer to set the reverse DNS entry for

### `hetzner_list_certificates` (~93 tokens)

List Certificates

List all SSL/TLS certificates in the project, with optional filtering.

Input parameters:

- `label_selector` (string): Label filter, e.g. "env=prod,tier=web"
- `name` (string): Filter by name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)
- `type` (string): Filter by certificate type

### `hetzner_get_certificate` (~30 tokens)

Get Certificate

Get details of a specific certificate by its ID.

Input parameters:

- `id` (integer, required): Resource ID

### `hetzner_create_certificate` (~114 tokens)

Create Certificate

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

Input parameters:

- `certificate` (string): PEM-encoded certificate (required for uploaded type)
- `domain_names` (array): Domain names (required for managed type)
- `labels` (object): Labels as key-value pairs
- `name` (string, required): Name of the certificate
- `private_key` (string): PEM-encoded private key (required for uploaded type)
- `type` (string): Certificate type (default: uploaded)

### `hetzner_update_certificate` (~51 tokens)

Update Certificate

Update a certificate name or labels.

Input parameters:

- `id` (integer, required): Resource ID
- `labels` (object): Labels as key-value pairs
- `name` (string): New name for the certificate

### `hetzner_delete_certificate` (~36 tokens)

Delete Certificate

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

Input parameters:

- `id` (integer, required): Resource ID

### `hetzner_retry_certificate` (~32 tokens)

Retry Certificate Issuance

Retry issuance or renewal of a managed certificate that has failed.

Input parameters:

- `id` (integer, required): Resource ID

### `hetzner_list_certificate_actions` (~108 tokens)

List Certificate Actions

List all actions performed on a specific certificate, such as issuance and renewal retries.

Input parameters:

- `id` (integer, required): Certificate ID
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)
- `sort` (string): Sort field, e.g. "id:asc" or "name:desc"
- `status` (string): Filter by action status: comma-separated list of "running", "success", "error"

### `hetzner_list_volumes` (~98 tokens)

List Volumes

List all volumes in the project, with optional filtering by name, label, or status.

Input parameters:

- `label_selector` (string): Label filter, e.g. "env=prod,tier=web"
- `name` (string): Filter by volume name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)
- `status` (string): Filter by volume status

### `hetzner_get_volume` (~29 tokens)

Get Volume

Get details of a specific volume by ID.

Input parameters:

- `id` (integer, required): Volume ID

### `hetzner_create_volume` (~139 tokens)

Create Volume

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

Input parameters:

- `automount` (boolean): Auto-mount the volume after attaching to a server
- `format` (string): Filesystem format for the volume
- `labels` (object): Labels as key-value pairs
- `location` (string): Location name (e.g. "fsn1"). Required if server is not set
- `name` (string, required): Name of the volume
- `server` (integer): Server ID to attach the volume to. Required if location is not set
- `size` (integer, required): Size of the volume in GB

### `hetzner_update_volume` (~50 tokens)

Update Volume

Update a volume's name or labels.

Input parameters:

- `id` (integer, required): Volume ID
- `labels` (object): Labels as key-value pairs
- `name` (string): New volume name

### `hetzner_delete_volume` (~34 tokens)

Delete Volume

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

Input parameters:

- `id` (integer, required): Volume ID

### `hetzner_attach_volume` (~67 tokens)

Attach Volume

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

Input parameters:

- `automount` (boolean): Auto-mount the volume after attaching
- `id` (integer, required): Volume ID
- `server` (integer, required): Server ID to attach the volume to

### `hetzner_detach_volume` (~33 tokens)

Detach Volume

Detach a volume from the server it is attached to.

Input parameters:

- `id` (integer, required): Volume ID

### `hetzner_resize_volume` (~59 tokens)

Resize Volume

Increase the size of a volume. Volumes can only be made larger, not smaller.

Input parameters:

- `id` (integer, required): Volume ID
- `size` (integer, required): New size of the volume in GB (must be larger than current size)

### `hetzner_change_volume_protection` (~52 tokens)

Change Volume Protection

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

Input parameters:

- `delete` (boolean): If true, prevents the volume from being deleted
- `id` (integer, required): Volume ID

### `hetzner_list_volume_actions` (~111 tokens)

List Volume Actions

List all actions performed on a specific volume, such as attach, detach, and resize operations.

Input parameters:

- `id` (integer, required): Volume ID
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)
- `sort` (string): Sort field, e.g. "id:asc" or "name:desc"
- `status` (string): Filter by action status: comma-separated list of "running", "success", "error"

### `hetzner_list_floating_ips` (~88 tokens)

List Floating IPs

List all floating IPs in the project, with optional filtering by name or label.

Input parameters:

- `label_selector` (string): Label filter, e.g. "env=prod,tier=web"
- `name` (string): Filter by floating IP name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)

### `hetzner_get_floating_ip` (~33 tokens)

Get Floating IP

Get details of a specific floating IP by ID.

Input parameters:

- `id` (integer, required): Floating IP ID

### `hetzner_create_floating_ip` (~122 tokens)

Create Floating IP

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

Input parameters:

- `description` (string): Description of the floating IP
- `home_location` (string): Home location name (e.g. "fsn1"). Required if server is not set
- `labels` (object): Labels as key-value pairs
- `name` (string): Name of the floating IP
- `server` (integer): Server ID to assign the floating IP to. Required if home_location is not set
- `type` (string, required): IP type

### `hetzner_update_floating_ip` (~65 tokens)

Update Floating IP

Update a floating IP's name, description, or labels.

Input parameters:

- `description` (string): New description
- `id` (integer, required): Floating IP ID
- `labels` (object): Labels as key-value pairs
- `name` (string): New name

### `hetzner_delete_floating_ip` (~58 tokens)

Delete Floating IP

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.

Input parameters:

- `id` (integer, required): Floating IP ID

### `hetzner_assign_floating_ip` (~50 tokens)

Assign Floating IP

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

Input parameters:

- `id` (integer, required): Floating IP ID
- `server` (integer, required): Server ID to assign the floating IP to

### `hetzner_unassign_floating_ip` (~38 tokens)

Unassign Floating IP

Unassign a floating IP from the server it is currently assigned to.

Input parameters:

- `id` (integer, required): Floating IP ID

### `hetzner_change_floating_ip_rdns` (~75 tokens)

Change Floating IP Reverse DNS

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

Input parameters:

- `dns_ptr` (required): Reverse DNS PTR record value, or null to reset
- `id` (integer, required): Floating IP ID
- `ip` (string, required): IP address to set the reverse DNS entry for

### `hetzner_change_floating_ip_protection` (~57 tokens)

Change Floating IP Protection

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

Input parameters:

- `delete` (boolean): If true, prevents the floating IP from being deleted
- `id` (integer, required): Floating IP ID

### `hetzner_list_floating_ip_actions` (~117 tokens)

List Floating IP Actions

List all actions performed on a specific floating IP, such as assign, unassign, and rDNS changes.

Input parameters:

- `id` (integer, required): Floating IP ID
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)
- `sort` (string): Sort field, e.g. "id:asc" or "name:desc"
- `status` (string): Filter by action status: comma-separated list of "running", "success", "error"

### `hetzner_list_primary_ips` (~102 tokens)

List Primary IPs

List all primary IPs in the project, with optional filtering by name, label, or IP address.

Input parameters:

- `ip` (string): Filter by IP address
- `label_selector` (string): Label filter, e.g. "env=prod,tier=web"
- `name` (string): Filter by primary IP name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)

### `hetzner_get_primary_ip` (~32 tokens)

Get Primary IP

Get details of a specific primary IP by ID.

Input parameters:

- `id` (integer, required): Primary IP ID

### `hetzner_create_primary_ip` (~142 tokens)

Create Primary IP

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

Input parameters:

- `assignee_type` (string): Assignee type. Optional since 2026-04-27; defaults to "server" until 2026-08-01, then to "unassigned".
- `auto_delete` (boolean): Delete the primary IP when the assignee is deleted
- `datacenter` (string): Datacenter name (e.g. "fsn1-dc14")
- `labels` (object): Labels as key-value pairs
- `name` (string, required): Name of the primary IP
- `type` (string, required): IP type

### `hetzner_update_primary_ip` (~75 tokens)

Update Primary IP

Update a primary IP's name, auto_delete setting, or labels.

Input parameters:

- `auto_delete` (boolean): Delete the primary IP when the assignee is deleted
- `id` (integer, required): Primary IP ID
- `labels` (object): Labels as key-value pairs
- `name` (string): New name

### `hetzner_delete_primary_ip` (~57 tokens)

Delete Primary IP

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.

Input parameters:

- `id` (integer, required): Primary IP ID

### `hetzner_assign_primary_ip` (~64 tokens)

Assign Primary IP

Assign a primary IP to a server.

Input parameters:

- `assignee_id` (integer, required): Server ID to assign the primary IP to
- `assignee_type` (string, required): Assignee type (must be "server")
- `id` (integer, required): Primary IP ID

### `hetzner_unassign_primary_ip` (~37 tokens)

Unassign Primary IP

Unassign a primary IP from the server it is currently assigned to.

Input parameters:

- `id` (integer, required): Primary IP ID

### `hetzner_change_primary_ip_rdns` (~74 tokens)

Change Primary IP Reverse DNS

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

Input parameters:

- `dns_ptr` (required): Reverse DNS PTR record value, or null to reset
- `id` (integer, required): Primary IP ID
- `ip` (string, required): IP address to set the reverse DNS entry for

### `hetzner_change_primary_ip_protection` (~56 tokens)

Change Primary IP Protection

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

Input parameters:

- `delete` (boolean): If true, prevents the primary IP from being deleted
- `id` (integer, required): Primary IP ID

### `hetzner_list_primary_ip_actions` (~116 tokens)

List Primary IP Actions

List all actions performed on a specific primary IP, such as assign, unassign, and rDNS changes.

Input parameters:

- `id` (integer, required): Primary IP ID
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)
- `sort` (string): Sort field, e.g. "id:asc" or "name:desc"
- `status` (string): Filter by action status: comma-separated list of "running", "success", "error"

### `hetzner_list_ssh_keys` (~102 tokens)

List SSH Keys

List all SSH keys in the project, with optional filtering by name, label, or fingerprint.

Input parameters:

- `fingerprint` (string): Filter by SSH key fingerprint
- `label_selector` (string): Label filter, e.g. "env=prod,tier=web"
- `name` (string): Filter by SSH key name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)

### `hetzner_get_ssh_key` (~33 tokens)

Get SSH Key

Get details of a specific SSH key by ID.

Input parameters:

- `id` (integer, required): SSH key ID

### `hetzner_create_ssh_key` (~74 tokens)

Create SSH Key

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

Input parameters:

- `labels` (object): Labels as key-value pairs
- `name` (string, required): Name of the SSH key
- `public_key` (string, required): SSH public key content (e.g. "ssh-rsa AAAA...")

### `hetzner_update_ssh_key` (~55 tokens)

Update SSH Key

Update an SSH key's name or labels.

Input parameters:

- `id` (integer, required): SSH key ID
- `labels` (object): Labels as key-value pairs
- `name` (string): New SSH key name

### `hetzner_delete_ssh_key` (~32 tokens)

Delete SSH Key

Delete an SSH key from the project permanently.

Input parameters:

- `id` (integer, required): SSH key ID

### `hetzner_list_storage_boxes` (~107 tokens)

List Storage Boxes

List all Storage Boxes in the project, with optional filtering by name or labels.

Input parameters:

- `label_selector` (string): Label filter, e.g. "env=prod,tier=web"
- `name` (string): Filter by name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)
- `sort` (string): Sort field, e.g. "id:asc" or "name:desc"

### `hetzner_create_storage_box` (~151 tokens)

Create Storage Box

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

Input parameters:

- `access_settings` (object): Initial access settings for the Storage Box
- `labels` (object): Labels as key-value pairs
- `location` (string, required): ID or name of the location, e.g. "fsn1"
- `name` (string, required): Name of the Storage Box
- `password` (string, required): Password for the Storage Box main account
- `ssh_keys` (array): SSH public keys in OpenSSH format to inject into the Storage Box
- `storage_box_type` (string, required): ID or name of the Storage Box type, e.g. "bx20"

### `hetzner_get_storage_box` (~32 tokens)

Get Storage Box

Get details of a specific Storage Box by ID.

Input parameters:

- `id` (integer, required): Storage Box ID

### `hetzner_update_storage_box` (~58 tokens)

Update Storage Box

Update the name and/or labels of a Storage Box.

Input parameters:

- `id` (integer, required): Storage Box ID
- `labels` (object): Labels as key-value pairs
- `name` (string): New name for the Storage Box

### `hetzner_delete_storage_box` (~43 tokens)

Delete Storage Box

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

Input parameters:

- `id` (integer, required): Storage Box ID

### `hetzner_list_storage_box_folders` (~56 tokens)

List Storage Box Folders

List the folders inside a Storage Box, optionally under a given path.

Input parameters:

- `id` (integer, required): Storage Box ID
- `path` (string): Directory path to list folders under (defaults to the root)

### `hetzner_list_storage_box_actions` (~112 tokens)

List Storage Box Actions

List all actions performed on a specific Storage Box, such as type changes and password resets.

Input parameters:

- `id` (integer, required): Storage Box ID
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)
- `sort` (string): Sort field, e.g. "id:asc" or "name:desc"
- `status` (string): Filter by action status: comma-separated list of "running", "success", "error"

### `hetzner_change_storage_box_protection` (~56 tokens)

Change Storage Box Protection

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

Input parameters:

- `delete` (boolean): If true, prevents the Storage Box from being deleted
- `id` (integer, required): Storage Box ID

### `hetzner_change_storage_box_type` (~72 tokens)

Change Storage Box Type

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

Input parameters:

- `id` (integer, required): Storage Box ID
- `storage_box_type` (string, required): ID or name of the target Storage Box type, e.g. "bx30"

### `hetzner_reset_storage_box_password` (~52 tokens)

Reset Storage Box Password

Reset the password of a Storage Box main account to the supplied value.

Input parameters:

- `id` (integer, required): Storage Box ID
- `password` (string, required): New password for the Storage Box main account

### `hetzner_update_storage_box_access_settings` (~137 tokens)

Update Storage Box Access Settings

Update which access protocols (SSH, Samba, WebDAV, ZFS, external reachability) are enabled on a Storage Box.

Input parameters:

- `id` (integer, required): Storage Box ID
- `reachable_externally` (boolean): Whether the Storage Box is reachable from outside the Hetzner network
- `samba_enabled` (boolean): Whether Samba/CIFS access is enabled
- `ssh_enabled` (boolean): Whether SSH/SFTP/SCP access is enabled
- `webdav_enabled` (boolean): Whether WebDAV access is enabled
- `zfs_enabled` (boolean): Whether the ZFS snapshot directory is exposed

### `hetzner_rollback_storage_box_snapshot` (~58 tokens)

Rollback Storage Box Snapshot

Roll a Storage Box back to a snapshot. This overwrites current data with the snapshot contents.

Input parameters:

- `id` (integer, required): Storage Box ID
- `snapshot` (string, required): Name of the snapshot to roll back to

### `hetzner_enable_storage_box_snapshot_plan` (~141 tokens)

Enable Storage Box Snapshot Plan

Enable or update the automatic snapshot plan for a Storage Box (schedule and retention).

Input parameters:

- `day_of_month`: Day of month to run monthly (1-31), or null
- `day_of_week`: Day of week to run weekly (1=Monday .. 7=Sunday), or null
- `hour` (integer, required): Hour of the day to run the snapshot (0-23, UTC)
- `id` (integer, required): Storage Box ID
- `max_snapshots` (integer, required): Maximum number of automatic snapshots to retain
- `minute` (integer, required): Minute of the hour to run the snapshot (0-59)

### `hetzner_disable_storage_box_snapshot_plan` (~39 tokens)

Disable Storage Box Snapshot Plan

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

Input parameters:

- `id` (integer, required): Storage Box ID

### `hetzner_list_storage_box_types` (~62 tokens)

List Storage Box Types

List all available Storage Box types with their capacity, limits, and pricing.

Input parameters:

- `name` (string): Filter by name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)

### `hetzner_get_storage_box_type` (~40 tokens)

Get Storage Box Type

Get details of a specific Storage Box type by ID, including capacity and pricing.

Input parameters:

- `id` (integer, required): Storage Box type ID

### `hetzner_list_storage_box_snapshots` (~122 tokens)

List Storage Box Snapshots

List the snapshots of a Storage Box, with optional filtering by name, labels, or automatic-vs-manual.

Input parameters:

- `id` (integer, required): Storage Box ID
- `is_automatic` (boolean): Filter by whether the snapshot was created by the snapshot plan
- `label_selector` (string): Label filter, e.g. "env=prod,tier=web"
- `name` (string): Filter by name
- `sort` (string): Sort field, e.g. "id:asc" or "name:desc"

### `hetzner_create_storage_box_snapshot` (~64 tokens)

Create Storage Box Snapshot

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

Input parameters:

- `description` (string): Human-readable description for the snapshot
- `id` (integer, required): Storage Box ID
- `labels` (object): Labels as key-value pairs

### `hetzner_get_storage_box_snapshot` (~44 tokens)

Get Storage Box Snapshot

Get details of a specific Storage Box snapshot by ID.

Input parameters:

- `id` (integer, required): Storage Box ID
- `snapshot_id` (integer, required): Snapshot ID

### `hetzner_update_storage_box_snapshot` (~69 tokens)

Update Storage Box Snapshot

Update the description and/or labels of a Storage Box snapshot.

Input parameters:

- `description` (string): New description for the snapshot
- `id` (integer, required): Storage Box ID
- `labels` (object): Labels as key-value pairs
- `snapshot_id` (integer, required): Snapshot ID

### `hetzner_delete_storage_box_snapshot` (~40 tokens)

Delete Storage Box Snapshot

Delete a Storage Box snapshot permanently.

Input parameters:

- `id` (integer, required): Storage Box ID
- `snapshot_id` (integer, required): Snapshot ID

### `hetzner_list_storage_box_subaccounts` (~111 tokens)

List Storage Box Subaccounts

List the subaccounts of a Storage Box, with optional filtering by name, username, or labels.

Input parameters:

- `id` (integer, required): Storage Box ID
- `label_selector` (string): Label filter, e.g. "env=prod,tier=web"
- `name` (string): Filter by name
- `sort` (string): Sort field, e.g. "id:asc" or "name:desc"
- `username` (string): Filter by subaccount username

### `hetzner_create_storage_box_subaccount` (~137 tokens)

Create Storage Box Subaccount

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

Input parameters:

- `access_settings` (object): Initial access settings for the subaccount
- `description` (string): Human-readable description for the subaccount
- `home_directory` (string, required): Home directory the subaccount is scoped to, e.g. "/backups/web"
- `id` (integer, required): Storage Box ID
- `labels` (object): Labels as key-value pairs
- `name` (string): Optional display name for the subaccount
- `password` (string, required): Password for the subaccount

### `hetzner_get_storage_box_subaccount` (~48 tokens)

Get Storage Box Subaccount

Get details of a specific Storage Box subaccount by ID.

Input parameters:

- `id` (integer, required): Storage Box ID
- `subaccount_id` (integer, required): Subaccount ID

### `hetzner_update_storage_box_subaccount` (~91 tokens)

Update Storage Box Subaccount

Update the name, description, and/or labels of a Storage Box subaccount.

Input parameters:

- `description` (string): New description for the subaccount
- `id` (integer, required): Storage Box ID
- `labels` (object): Labels as key-value pairs
- `name` (string): New display name for the subaccount
- `subaccount_id` (integer, required): Subaccount ID

### `hetzner_delete_storage_box_subaccount` (~52 tokens)

Delete Storage Box Subaccount

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

Input parameters:

- `id` (integer, required): Storage Box ID
- `subaccount_id` (integer, required): Subaccount ID

### `hetzner_change_storage_box_subaccount_home_directory` (~74 tokens)

Change Storage Box Subaccount Home Directory

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

Input parameters:

- `home_directory` (string, required): New home directory for the subaccount, e.g. "/backups/db"
- `id` (integer, required): Storage Box ID
- `subaccount_id` (integer, required): Subaccount ID

### `hetzner_reset_storage_box_subaccount_password` (~64 tokens)

Reset Storage Box Subaccount Password

Reset the password of a Storage Box subaccount to the supplied value.

Input parameters:

- `id` (integer, required): Storage Box ID
- `password` (string, required): New password for the subaccount
- `subaccount_id` (integer, required): Subaccount ID

### `hetzner_update_storage_box_subaccount_access_settings` (~161 tokens)

Update Storage Box Subaccount Access Settings

Update the access settings (read-only, SSH, Samba, WebDAV, external reachability) of a Storage Box subaccount.

Input parameters:

- `id` (integer, required): Storage Box ID
- `reachable_externally` (boolean): Whether the subaccount is reachable from outside the Hetzner network
- `readonly` (boolean): Whether the subaccount has read-only access
- `samba_enabled` (boolean): Whether Samba/CIFS access is enabled for the subaccount
- `ssh_enabled` (boolean): Whether SSH/SFTP/SCP access is enabled for the subaccount
- `subaccount_id` (integer, required): Subaccount ID
- `webdav_enabled` (boolean): Whether WebDAV access is enabled for the subaccount

### `hetzner_list_zones` (~125 tokens)

List DNS Zones

List all DNS zones in the project, with optional filtering by name, mode (primary/secondary), or labels.

Input parameters:

- `label_selector` (string): Label filter, e.g. "env=prod,tier=web"
- `mode` (string): Filter by zone mode
- `name` (string): Filter by name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)
- `sort` (string): Sort field, e.g. "id:asc" or "name:desc"

### `hetzner_get_zone` (~44 tokens)

Get DNS Zone

Get details of a specific DNS zone by its numeric ID or zone name (e.g. "example.com").

Input parameters:

- `id_or_name` (required): Zone ID or name

### `hetzner_create_zone` (~178 tokens)

Create DNS Zone

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

Input parameters:

- `labels` (object): Labels as key-value pairs
- `mode` (string, required): Zone mode: "primary" (managed here) or "secondary" (transferred from external primary)
- `name` (string, required): Fully qualified domain name of the zone, e.g. "example.com"
- `primary_nameservers` (array): Primary nameservers (required for secondary zones)
- `rrsets` (array): Initial RRSets to create with the zone
- `ttl` (integer): Default TTL in seconds for records in this zone
- `zonefile` (string): Initial zone content in RFC 1035 zonefile format (alternative to rrsets)

### `hetzner_update_zone` (~53 tokens)

Update DNS Zone

Update a DNS zone's labels. Other zone properties are managed via dedicated change_* action tools.

Input parameters:

- `id_or_name` (required): Zone ID or name
- `labels` (object): Labels as key-value pairs

### `hetzner_delete_zone` (~44 tokens)

Delete DNS Zone

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

Input parameters:

- `id_or_name` (required): Zone ID or name

### `hetzner_export_zonefile` (~41 tokens)

Export DNS Zonefile

Export the current contents of a DNS zone as an RFC 1035 zonefile string.

Input parameters:

- `id_or_name` (required): Zone ID or name

### `hetzner_import_zonefile` (~68 tokens)

Import DNS Zonefile

Replace the contents of a DNS zone with the given RFC 1035 zonefile. This overwrites all existing RRSets.

Input parameters:

- `id_or_name` (required): Zone ID or name
- `zonefile` (string, required): Full zone content in RFC 1035 zonefile format

### `hetzner_change_zone_protection` (~55 tokens)

Change DNS Zone Protection

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

Input parameters:

- `delete` (boolean): If true, prevents the zone from being deleted
- `id_or_name` (required): Zone ID or name

### `hetzner_change_zone_ttl` (~55 tokens)

Change DNS Zone Default TTL

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

Input parameters:

- `id_or_name` (required): Zone ID or name
- `ttl` (integer, required): New default TTL in seconds

### `hetzner_change_zone_primary_nameservers` (~62 tokens)

Change DNS Zone Primary Nameservers

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

Input parameters:

- `id_or_name` (required): Zone ID or name
- `primary_nameservers` (array, required): New full list of primary nameservers

### `hetzner_list_zone_actions` (~116 tokens)

List DNS Zone Actions

List all actions performed on a specific DNS zone, such as imports, TTL changes, and protection toggles.

Input parameters:

- `id_or_name` (required): Zone ID or name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)
- `sort` (string): Sort field, e.g. "id:asc" or "name:desc"
- `status` (string): Filter by action status: comma-separated list of "running", "success", "error"

### `hetzner_list_zone_rrsets` (~138 tokens)

List DNS Zone RRSets

List all RRSets in a DNS zone, with optional filtering by name, type, or labels.

Input parameters:

- `id_or_name` (required): Zone ID or name
- `label_selector` (string): Label filter, e.g. "env=prod,tier=web"
- `name` (string): Filter by name
- `page` (integer): Page number
- `per_page` (integer): Results per page (max 50)
- `sort` (string): Sort field, e.g. "id:asc" or "name:desc"
- `type` (array): Filter by one or more record types

### `hetzner_get_zone_rrset` (~88 tokens)

Get DNS Zone RRSet

Get a specific RRSet by zone, name, and record type.

Input parameters:

- `id_or_name` (required): Zone ID or name
- `name` (string, required): RRSet name (e.g. "@", "www", "_acme-challenge")
- `type` (string, required): DNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)

### `hetzner_create_zone_rrset` (~129 tokens)

Create DNS Zone RRSet

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

Input parameters:

- `id_or_name` (required): Zone ID or name
- `labels` (object): Labels as key-value pairs
- `name` (string, required): RRSet name (e.g. "@", "www", "_acme-challenge")
- `records` (array): Records belonging to this RRSet
- `ttl` (integer): TTL in seconds for records in this RRSet
- `type` (string, required): DNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)

### `hetzner_update_zone_rrset` (~89 tokens)

Update DNS Zone RRSet

Update an RRSet's labels. Records and TTL are managed via dedicated action tools.

Input parameters:

- `id_or_name` (required): Zone ID or name
- `labels` (object): Labels as key-value pairs
- `name` (string, required): RRSet name
- `type` (string, required): DNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)

### `hetzner_delete_zone_rrset` (~80 tokens)

Delete DNS Zone RRSet

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

Input parameters:

- `id_or_name` (required): Zone ID or name
- `name` (string, required): RRSet name
- `type` (string, required): DNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)

### `hetzner_change_zone_rrset_protection` (~98 tokens)

Change DNS Zone RRSet Protection

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

Input parameters:

- `change` (boolean): If true, prevents the RRSet from being modified or deleted
- `id_or_name` (required): Zone ID or name
- `name` (string, required): RRSet name
- `type` (string, required): DNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)

### `hetzner_change_zone_rrset_ttl` (~101 tokens)

Change DNS Zone RRSet TTL

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

Input parameters:

- `id_or_name` (required): Zone ID or name
- `name` (string, required): RRSet name
- `ttl` (required): New TTL in seconds, or null to fall back to the zone default
- `type` (string, required): DNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)

### `hetzner_set_zone_rrset_records` (~97 tokens)

Set DNS Zone RRSet Records

Replace the full list of records in an RRSet. Existing records not in the payload are removed.

Input parameters:

- `id_or_name` (required): Zone ID or name
- `name` (string, required): RRSet name
- `records` (array, required): Full replacement list of records for this RRSet
- `type` (string, required): DNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)

### `hetzner_add_zone_rrset_records` (~110 tokens)

Add Records to DNS Zone RRSet

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

Input parameters:

- `id_or_name` (required): Zone ID or name
- `name` (string, required): RRSet name
- `records` (array, required): Records to add to the RRSet
- `ttl` (integer): Optional new TTL applied alongside the addition
- `type` (string, required): DNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)

### `hetzner_update_zone_rrset_records` (~100 tokens)

Update DNS Zone RRSet Record Comments

Update the comment on existing records in an RRSet (matched by value). The comment field is always sent — use an empty string to clear.

Input parameters:

- `id_or_name` (required): Zone ID or name
- `name` (string, required): RRSet name
- `records` (array, required): Records to update
- `type` (string, required): DNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)

### `hetzner_remove_zone_rrset_records` (~94 tokens)

Remove Records from DNS Zone RRSet

Remove specific records from an RRSet (matched by value) without deleting the RRSet itself.

Input parameters:

- `id_or_name` (required): Zone ID or name
- `name` (string, required): RRSet name
- `records` (array, required): Records to remove (matched by value)
- `type` (string, required): DNS record type (A, AAAA, CNAME, MX, NS, TXT, etc.)

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/lazyants-hetzner/lazyants-hetzner-mcp-server#diagnostics

## Score history

- 2026-08-04: 78
- 2026-08-03: 78
- 2026-08-02: 78
- 2026-08-01: 31
- 2026-07-31: 26
- 2026-07-30: 53
- 2026-07-28: 53
- 2026-07-27: 53

## Links

- npm package: https://www.npmjs.com/package/@lazyants/hetzner-mcp-server
- Socket report: https://socket.dev/npm/package/@lazyants/hetzner-mcp-server
- Repository: https://github.com/lazyants/hetzner-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/lazyants-hetzner/lazyants-hetzner-mcp-server/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/lazyants-hetzner/lazyants-hetzner-mcp-server/changelog.json
- HTML version of this page: https://verifymcp.io/servers/lazyants-hetzner/lazyants-hetzner-mcp-server
