Skip to content

Hetzner Cloud MCP server via DADL

Hetzner Cloud API -- servers, volumes, networks, load balancers, firewalls, floating IPs, primary IPs, images, SSH keys, placement groups, certificates, and infrastructure metadata

Use the Hetzner Cloud API as an MCP server with Claude, GPT, or any MCP-compatible AI agent — defined declaratively in a single DADL file, served by ToolMesh. No custom MCP server code, no boilerplate.

Source: Hetzner Cloud API

Credits: Dunkel Cloud GmbH -- maintainer Updated: 2026-04-01

Coverage

61% (122 of ~200 endpoints)

Focus: servers, server actions, server metrics, volumes, networks, firewalls, load balancers, load balancer metrics, floating IPs, primary IPs, images, SSH keys, placement groups, certificates, datacenters, locations, server types, ISOs, pricing

Missing: storage boxes (separate API at api.hetzner.com), DNS zones/rrsets (separate API), S3 credential management

Last reviewed: 2026-04-01

Setup

  1. Log in to Hetzner Cloud Console at https://console.hetzner.cloud
  2. Select or create a project
  3. Navigate to Security -> API Tokens
  4. Click 'Generate API Token'
  5. Enter a description and select Read or Read & Write permissions
  6. Copy the token immediately -- it is shown only once

Environment variable: CREDENTIAL_HETZNER_CLOUD_TOKEN

Authentication docs ↗

API tokens are scoped to a single project. To manage multiple projects, create one token per project. Tokens have either Read or Read & Write permission -- there are no per-resource scopes.

Install

Add to your backends.yaml:

- name: hetzner-cloud
  transport: rest
  dadl: /app/dadl/hetzner-cloud.dadl

Set the credential:

CREDENTIAL_HETZNER_CLOUD_TOKEN=your-token-here

Tools (123)

GET list_servers List all servers. Supports label_selector, name, sort, and status filtering.
GET get_server Get details of a specific server
POST create_server Create a new server. Returns server object and root_password (if no SSH keys). Action is async -- poll the returned action.
PUT update_server Update a server's name or labels
DELETE delete_server Delete a server immediately. All data on the server is lost. Irreversible.
POST power_on_server Power on a server
POST power_off_server Hard power off a server (like pulling the power cord). Use shutdown for graceful stop.
POST reboot_server Soft reboot a server (sends ACPI signal)
POST reset_server Hard reset a server (like pressing the reset button). Use reboot for graceful restart.
POST shutdown_server Gracefully shut down a server (sends ACPI shutdown signal)
POST enable_rescue_server Enable rescue mode. Returns root_password for the rescue system. Reboot to enter rescue.
POST disable_rescue_server Disable rescue mode
POST rebuild_server Rebuild a server from an image. All data is destroyed. Irreversible.
POST change_server_type Change server type (resize). Server must be off. Disk can only be upgraded, not downgraded.
POST create_image_from_server Create a snapshot image from a server
POST attach_iso_to_server Attach an ISO to a server
POST detach_iso_from_server Detach any ISO from a server
POST change_server_protection Change delete and rebuild protection for a server
POST change_server_dns_ptr Change reverse DNS entry for a server IP
POST attach_server_to_network Attach a server to a network
POST detach_server_from_network Detach a server from a network
POST enable_server_backup Enable automatic backups for a server
POST disable_server_backup Disable automatic backups for a server. Existing backups are kept until their expiry.
POST add_server_to_placement_group Add a server to a placement group. Server must be stopped.
POST remove_server_from_placement_group Remove a server from its placement group
GET list_server_actions List all actions for a server
GET get_server_action Get details of a specific server action
GET get_server_metrics Get metrics (time series) for a server. Returns Prometheus-style data points for the requested metric types within the given time range.
GET get_load_balancer_metrics Get metrics for a load balancer. Returns time series for open connections, connections/s, requests/s, and bandwidth.
GET list_volumes List all volumes
GET get_volume Get details of a specific volume
POST create_volume Create a new volume. Set server to auto-attach, or leave unattached.
PUT update_volume Update a volume's name or labels
DELETE delete_volume Delete a volume. Must be detached first.
POST attach_volume Attach a volume to a server
POST detach_volume Detach a volume from a server
POST resize_volume Resize a volume. Can only increase size, not decrease.
POST change_volume_protection Change delete protection for a volume
GET list_networks List all networks
GET get_network Get details of a specific network
POST create_network Create a new network with an RFC 1918 IP range
PUT update_network Update a network's name or labels
DELETE delete_network Delete a network. All subnets and routes are removed.
POST add_subnet_to_network Add a subnet to a network
POST delete_subnet_from_network Delete a subnet from a network
POST add_route_to_network Add a route to a network
POST delete_route_from_network Delete a route from a network
POST change_network_protection Change delete protection for a network
GET list_firewalls List all firewalls
GET get_firewall Get details of a specific firewall including its rules
POST create_firewall Create a new firewall with optional initial rules and resource assignments
PUT update_firewall Update a firewall's name or labels
DELETE delete_firewall Delete a firewall. Must be unapplied from all resources first.
POST set_firewall_rules Overwrite all rules of a firewall. This replaces all existing rules.
POST apply_firewall_to_resources Apply a firewall to servers or label selectors
POST remove_firewall_from_resources Remove a firewall from servers or label selectors
GET list_load_balancers List all load balancers
GET get_load_balancer Get details of a specific load balancer
POST create_load_balancer Create a new load balancer
PUT update_load_balancer Update a load balancer's name or labels
DELETE delete_load_balancer Delete a load balancer
POST add_load_balancer_service Add a service (listener) to a load balancer
POST update_load_balancer_service Update a service on a load balancer
POST delete_load_balancer_service Delete a service from a load balancer
POST add_load_balancer_target Add a target to a load balancer
POST remove_load_balancer_target Remove a target from a load balancer
POST change_load_balancer_type Change the type of a load balancer
POST change_load_balancer_protection Change delete protection for a load balancer
POST attach_load_balancer_to_network Attach a load balancer to a network
POST detach_load_balancer_from_network Detach a load balancer from a network
POST change_load_balancer_algorithm Change the balancing algorithm
POST change_load_balancer_dns_ptr Change reverse DNS entry for a load balancer IP
GET list_floating_ips List all floating IPs
GET get_floating_ip Get details of a specific floating IP
POST create_floating_ip Create a new floating IP
PUT update_floating_ip Update a floating IP's name, description, or labels
DELETE delete_floating_ip Delete a floating IP. Must be unassigned first.
POST assign_floating_ip Assign a floating IP to a server
POST unassign_floating_ip Unassign a floating IP from a server
POST change_floating_ip_protection Change delete protection for a floating IP
POST change_floating_ip_dns_ptr Change reverse DNS entry for a floating IP
GET list_primary_ips List all primary IPs
GET get_primary_ip Get details of a specific primary IP
POST create_primary_ip Create a new primary IP
PUT update_primary_ip Update a primary IP's name, labels, or auto_delete setting
DELETE delete_primary_ip Delete a primary IP. Must be unassigned first.
POST assign_primary_ip Assign a primary IP to a server
POST unassign_primary_ip Unassign a primary IP from a server
POST change_primary_ip_protection Change delete protection for a primary IP
POST change_primary_ip_dns_ptr Change reverse DNS entry for a primary IP
GET list_images List all images (system, snapshot, backup, app)
GET get_image Get details of a specific image
PUT update_image Update an image's description, type, or labels. Only for snapshot/backup images.
DELETE delete_image Delete an image. Only snapshot and backup images can be deleted.
POST change_image_protection Change delete protection for an image
GET list_ssh_keys List all SSH keys
GET get_ssh_key Get details of a specific SSH key
POST create_ssh_key Create (upload) a new SSH key
PUT update_ssh_key Update an SSH key's name or labels
DELETE delete_ssh_key Delete an SSH key
GET list_certificates List all certificates
GET get_certificate Get details of a specific certificate
POST create_certificate Create a certificate (upload or request managed via Let's Encrypt)
PUT update_certificate Update a certificate's name or labels
DELETE delete_certificate Delete a certificate
GET list_placement_groups List all placement groups
GET get_placement_group Get details of a specific placement group
POST create_placement_group Create a new placement group
PUT update_placement_group Update a placement group's name or labels
DELETE delete_placement_group Delete a placement group. Must have no servers assigned.
GET list_actions List all actions across all resources
GET get_action Get details of a specific action
GET list_server_types List all available server types with specs and pricing
GET get_server_type Get details of a specific server type
GET list_locations List all available locations
GET get_location Get details of a specific location
GET list_datacenters List all available datacenters
GET get_datacenter Get details of a specific datacenter
GET list_isos List all available ISO images
GET get_iso Get details of a specific ISO image
GET list_load_balancer_types List all available load balancer types
GET get_load_balancer_type Get details of a specific load balancer type
GET get_pricing Get all pricing information for server types, images, volumes, floating IPs, load balancers, and traffic