Skip to main content
Glama

mcp-hetzner

CI License: MIT Python MCP Hetzner APIs Transport Tools Ruff GitHub stars GitHub issues Last commit

A Model Context Protocol server that exposes the Hetzner Cloud, Hetzner DNS and Storage Box APIs as MCP tools, so any MCP-aware agent can manage your Hetzner infrastructure conversationally.

  • Cloud API — full CRUD for servers, volumes, networks, firewalls, load balancers, floating IPs, primary IPs, SSH keys, images, ISOs, placement groups, TLS certificates, plus server actions (power on/off, reboot, rescue, rebuild, snapshot, resize, …).

  • DNS API — full CRUD for zones, records (incl. bulk create/update), primary servers, zone-file import/export and validation.

  • Storage Box API — full CRUD for Storage Boxes, sub-accounts, snapshots, snapshot plans, and box/sub-account actions (password reset, access settings, type change, snapshot rollback).

  • Transports — both stdio and streamable HTTP are supported.

137 tools in total, registered under three clear namespace prefixes: cloud_*, dns_*, sb_*.

⚠️ Disclaimer: This is an independent open-source project. It is not affiliated with, endorsed by, or sponsored by Hetzner Online GmbH. "Hetzner" is a trademark of Hetzner Online GmbH and is used here in a purely descriptive sense.

Install

Python 3.10+ required. Install directly from GitHub.

pipx install git+https://github.com/ginkelsoft-development/mcp-hetzner.git

Pipx installs the package in an isolated environment and adds hetzner-mcp to your $PATH. Upgrade later with:

pipx upgrade hetzner-mcp

To pin a specific tag/branch, append @<ref>:

pipx install "git+https://github.com/ginkelsoft-development/mcp-hetzner.git@main"

Option B — pip in a virtualenv

python -m venv .venv
source .venv/bin/activate
pip install git+https://github.com/ginkelsoft-development/mcp-hetzner.git

Option C — clone for development

git clone https://github.com/ginkelsoft-development/mcp-hetzner.git
cd mcp-hetzner
pip install -e .

Smoke test (no tokens needed)

hetzner-mcp --list-tools | python -c "import json,sys; print(len(json.load(sys.stdin)),'tools')"
# -> 137 tools

Related MCP server: hetzner-mcp

Tokens

The three Hetzner APIs each use their own token:

Variable

Where to create it

HCLOUD_TOKEN

https://console.hetzner.cloud → your project → Security → API Tokens

HDNS_TOKEN

https://dns.hetzner.com/settings/api-token

HETZNER_TOKEN

https://console.hetzner.com → API Tokens (for Storage Boxes)

Copy .env.example to .env and fill in whichever you need. You can run the server with only the tokens you have — calls to unconfigured APIs return a structured 401 error instead of crashing.

Use it in an MCP-compatible host

Every MCP-compatible host application accepts the same stdio-server block. Drop the snippet below into the host's MCP-server config and you're done.

The universal config block

{
  "mcpServers": {
    "hetzner": {
      "command": "hetzner-mcp",
      "env": {
        "HCLOUD_TOKEN": "...",
        "HDNS_TOKEN": "...",
        "HETZNER_TOKEN": "..."
      }
    }
  }
}

Where each host stores its config

Host

Config location

Transport

Cursor

Settings → Cursor Settings → MCP → "Add new MCP server"

stdio or HTTP

Cline (VS Code)

Cline extension → "MCP Servers" panel

stdio

Continue (VS Code / JetBrains)

~/.continue/config.json → experimental.modelContextProtocolServer

stdio

Zed

~/.config/zed/settings.json → context_servers

stdio

Cody

Settings → Cody → MCP servers

stdio

Other desktop AI chat apps (macOS/Windows)

Their MCP / connector settings — see the app's own docs

stdio

Web-based AI chat apps

Their "custom connectors" / remote MCP settings

HTTP only

Custom Python/TypeScript agent (MCP SDK)

Whatever your client passes to StdioServerParameters / equivalent

stdio or HTTP

After saving the config, restart the host application. Most hosts surface a tool/plug icon in the chat interface when the server has connected successfully. You can confirm tool registration with a simple prompt such as:

"Run hetzner_health and tell me which tokens are configured."

Tip: absolute paths if hetzner-mcp isn't on the host's PATH

GUI applications often don't inherit your shell's PATH. If you see a "command not found" error in the host's logs, replace "hetzner-mcp" with the full path returned by which hetzner-mcp. Or use the explicit Python form:

{
  "mcpServers": {
    "hetzner": {
      "command": "/full/path/to/python",
      "args": ["-m", "hetzner_mcp"],
      "env": { "HCLOUD_TOKEN": "...", "HDNS_TOKEN": "...", "HETZNER_TOKEN": "..." }
    }
  }
}

Run as HTTP (remote / shared)

Use this when you want a single shared deployment instead of installing the server on each user's machine — for example to plug it into a web-based AI host that only accepts remote MCP servers via custom connectors.

hetzner-mcp --http --host 0.0.0.0 --port 8765

The streamable-HTTP endpoint is mounted at /mcp. Point an MCP-aware client at http://your-host:8765/mcp.

🔒 Don't expose this endpoint to the public internet without a reverse proxy that enforces authentication and TLS. The MCP server itself has no auth layer — anyone who can reach the port can use your tokens.

A minimal hardening checklist before going public:

  1. Put the server behind a reverse proxy (Caddy, nginx, Traefik) with TLS.

  2. Require authentication at the proxy level (Basic auth, OAuth proxy, Cloudflare Access, Tailscale serve, etc.).

  3. Allow-list the IP ranges your host actually calls from, where possible.

  4. Use Hetzner API tokens scoped to read-only or to a specific project.

Tool naming

Tools are prefixed by API so it's always obvious which surface they touch:

  • cloud_* — Hetzner Cloud (servers, volumes, networks, …) — 91 tools

  • dns_* — Hetzner DNS (zones, records, …) — 20 tools

  • sb_* — Storage Box (storage boxes, sub-accounts, snapshots, …) — 25 tools

  • hetzner_health — reports which tokens are configured (no network call)

Run hetzner-mcp --list-tools for the full list with one-line descriptions.

Quick examples

"Spin up a cx22 in fsn1 with my SSH key, then add an A record for staging.example.com pointing at it."

Calls: cloud_list_ssh_keys → cloud_create_server → dns_list_zones → dns_create_record.

"Show me everything that's running, grouped by location."

Calls: cloud_list_servers, cloud_list_volumes, cloud_list_load_balancers, sb_list_storage_boxes.

"Resize storage-box 12345 from bx11 to bx21 — take a snapshot first."

Calls: sb_create_snapshot → sb_change_storage_box_type.

Safety notes

This server is fully read/write by default. Destructive tools (cloud_delete_server, sb_delete_storage_box, dns_delete_zone, …) will happily wipe resources if asked. For a safer setup, provision tokens with the narrowest permission scope the API supports (Cloud and DNS tokens both support read-only scopes).

Branch model

  • main — stable, what's published as releases.

  • develop — active development; PRs target this branch.

See CONTRIBUTING.md for the full workflow.

Development

pip install -e ".[dev]"
ruff check src
hetzner-mcp --list-tools

License

MIT — © 2026 Ginkelsoft Development.

Available Tools

137 tools
cloud_add_lb_serviceC

Add a service to a load balancer.

Inputs: load_balancer_id (required), protocol (required), listen_port (required), destination_port (required), +3 more. Returns: result

cloud_add_lb_targetC

Add a target. type one of: server | label_selector | ip.

Inputs: load_balancer_id (required), type (required), server, label_selector, +2 more. Returns: result

cloud_add_network_subnetC

Add a subnet to a network. type: 'cloud' | 'server' | 'vswitch'.

Inputs: network_id (required), type (required), network_zone (required), ip_range, +1 more. Returns: result

cloud_apply_firewall_to_resourcesB

Apply a firewall to the given resources (servers or label_selectors).

Inputs: firewall_id (required), apply_to (required). Returns: result

cloud_assign_floating_ipC

Assign a floating IP to a server.

Inputs: floating_ip_id (required), server_id (required). Returns: result

cloud_assign_primary_ipC

Assign a primary IP to a server.

Inputs: primary_ip_id (required), assignee_id (required), assignee_type. Returns: result

cloud_attach_server_to_networkB

Attach a server to a private network.

Inputs: server_id (required), network_id (required), ip, alias_ips. Returns: result

cloud_attach_volumeC

Attach a volume to a server.

Inputs: volume_id (required), server_id (required), automount. Returns: result

cloud_change_server_typeC

Change the type (size) of a server. Server must be powered off.

Inputs: server_id (required), server_type (required), upgrade_disk. Returns: result

cloud_create_certificateB

Upload a TLS cert (type='uploaded') or request a managed one (type='managed').

Inputs: name (required), type, certificate, private_key, +2 more. Returns: result

cloud_create_firewallC

Create a firewall with optional rules and resource bindings.

Inputs: name (required), rules, apply_to, labels. Returns: result

cloud_create_floating_ipB

Create a floating IP. type: 'ipv4' | 'ipv6'. Either home_location or server required.

Inputs: type (required), home_location, server, name, +2 more. Returns: result

cloud_create_load_balancerC

Create a load balancer. Either location or network_zone is required.

Inputs: name (required), load_balancer_type (required), location, network_zone, +6 more. Returns: result

cloud_create_networkC

Create a private network. ip_range e.g. '10.0.0.0/16'.

Inputs: name (required), ip_range (required), subnets, routes, +2 more. Returns: result

cloud_create_placement_groupC

Create a placement group. Currently only type='spread' is supported.

Inputs: name (required), type, labels. Returns: result

cloud_create_primary_ipC

Create a primary IP. type: ipv4 | ipv6.

Inputs: type (required), assignee_type, assignee_id, datacenter, +3 more. Returns: result

cloud_create_serverC

Create a cloud server. server_type e.g. 'cx22', image e.g. 'ubuntu-24.04'.

Inputs: name (required), server_type (required), image (required), location, +11 more. Returns: result

cloud_create_server_imageC

Create a snapshot or backup image from a server.

Inputs: server_id (required), description, type, labels. Returns: result

cloud_create_ssh_keyC

Add an SSH public key to the project.

Inputs: name (required), public_key (required), labels. Returns: result

cloud_create_volumeB

Create a volume. size is in GB. Either location or server is required.

Inputs: name (required), size (required), location, server, +3 more. Returns: result

cloud_delete_certificateC

Delete a certificate.

Inputs: certificate_id (required). Returns: result

cloud_delete_firewallA

Delete a firewall. Must be detached from all resources first.

Inputs: firewall_id (required). Returns: result

cloud_delete_floating_ipC

Delete a floating IP.

Inputs: floating_ip_id (required). Returns: result

cloud_delete_imageB

Delete a snapshot or backup image. System images cannot be deleted.

Inputs: image_id (required). Returns: result

cloud_delete_lb_serviceB

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

Inputs: load_balancer_id (required), listen_port (required). Returns: result

cloud_delete_load_balancerC

Delete a load balancer.

Inputs: load_balancer_id (required). Returns: result

cloud_delete_networkA

Delete a network. All attached subnets are removed.

Inputs: network_id (required). Returns: result

cloud_delete_network_subnetB

Remove a subnet from a network by its ip_range.

Inputs: network_id (required), ip_range (required). Returns: result

cloud_delete_placement_groupB

Delete a placement group. Must be empty first.

Inputs: placement_group_id (required). Returns: result

cloud_delete_primary_ipB

Delete a primary IP. Must be unassigned first.

Inputs: primary_ip_id (required). Returns: result

cloud_delete_serverB

Delete (destroy) a cloud server. This is irreversible.

Inputs: server_id (required). Returns: result

cloud_delete_ssh_keyC

Delete an SSH key from the project.

Inputs: ssh_key_id (required). Returns: result

cloud_delete_volumeB

Delete a volume. Volume must be detached first.

Inputs: volume_id (required). Returns: result

cloud_detach_server_from_networkC

Detach a server from a private network.

Inputs: server_id (required), network_id (required). Returns: result

cloud_detach_volumeC

Detach a volume from its current server.

Inputs: volume_id (required). Returns: result

cloud_disable_server_backupC

Disable automatic backups for a server.

Inputs: server_id (required). Returns: result

cloud_disable_server_rescueB

Disable rescue mode for a cloud server.

Inputs: server_id (required). Returns: result

cloud_enable_server_backupB

Enable automatic backups for a server (incurs additional cost).

Inputs: server_id (required). Returns: result

cloud_enable_server_rescueC

Enable rescue mode for a cloud server. Reboot required to enter rescue.

Inputs: server_id (required), type, ssh_keys. Returns: result

cloud_get_actionB

Get a single action by ID.

Inputs: action_id (required). Returns: result

cloud_get_certificateB

Get a single certificate by ID.

Inputs: certificate_id (required). Returns: result

cloud_get_firewallB

Get a single firewall by ID.

Inputs: firewall_id (required). Returns: result

cloud_get_floating_ipB

Get a single floating IP by ID.

Inputs: floating_ip_id (required). Returns: result

cloud_get_imageB

Get a single image by ID.

Inputs: image_id (required). Returns: result

cloud_get_load_balancerC

Get a single load balancer by ID.

Inputs: load_balancer_id (required). Returns: result

cloud_get_networkB

Get a single private network by ID.

Inputs: network_id (required). Returns: result

cloud_get_placement_groupC

Get a single placement group by ID.

Inputs: placement_group_id (required). Returns: result

cloud_get_primary_ipA

Get a single primary IP by ID.

Inputs: primary_ip_id (required). Returns: result

cloud_get_serverB

Get a single cloud server by its numeric ID.

Inputs: server_id (required). Returns: result

cloud_get_server_metricsB

Get server metrics. type one of: cpu, disk, network. start/end RFC3339.

Inputs: server_id (required), type (required), start (required), end (required), +1 more. Returns: result

cloud_get_ssh_keyA

Get a single SSH key by ID.

Inputs: ssh_key_id (required). Returns: result

cloud_get_volumeB

Get a single volume by ID.

Inputs: volume_id (required). Returns: result

cloud_list_actionsC

List recent actions across all resources.

Inputs: page, per_page, sort, status, +1 more. Returns: result

cloud_list_certificatesC

List managed TLS certificates.

Inputs: page, per_page, name, type, +1 more. Returns: result

cloud_list_datacentersC

List specific datacenters within locations (e.g. fsn1-dc14).

Inputs: page, per_page, name. Returns: result

cloud_list_firewallsC

List firewalls.

Inputs: page, per_page, name, label_selector. Returns: result

cloud_list_floating_ipsC

List floating IPs.

Inputs: page, per_page, name, label_selector. Returns: result

cloud_list_imagesC

List images (system + snapshot + backup + app).

Inputs: page, per_page, name, type, +4 more. Returns: result

cloud_list_isosC

List ISO images available for servers.

Inputs: page, per_page, name, architecture. Returns: result

cloud_list_load_balancersC

List load balancers.

Inputs: page, per_page, name, label_selector. Returns: result

cloud_list_locationsC

List datacenter locations (fsn1, nbg1, hel1, ash, hil).

Inputs: page, per_page, name. Returns: result

cloud_list_networksC

List private networks.

Inputs: page, per_page, name, label_selector. Returns: result

cloud_list_placement_groupsC

List placement groups.

Inputs: page, per_page, name, type, +1 more. Returns: result

cloud_list_primary_ipsC

List primary IPs.

Inputs: page, per_page, name, label_selector. Returns: result

cloud_list_serversC

List cloud servers in the project. Supports filtering by name, label_selector and status.

Inputs: page, per_page, name, label_selector, +2 more. Returns: result

cloud_list_server_typesC

List available cloud server types (cx22, cpx21, ax42, etc.) and prices.

Inputs: page, per_page, name. Returns: result

cloud_list_ssh_keysD

List SSH keys in the project.

Inputs: page, per_page, name, fingerprint, +1 more. Returns: result

cloud_list_volumesC

List block-storage volumes.

Inputs: page, per_page, name, status, +1 more. Returns: result

cloud_power_off_serverB

Hard power-off a cloud server (does not gracefully shutdown).

Inputs: server_id (required). Returns: result

cloud_power_on_serverB

Power on a stopped cloud server.

Inputs: server_id (required). Returns: result

cloud_reboot_serverC

ACPI reboot a cloud server (graceful).

Inputs: server_id (required). Returns: result

cloud_rebuild_serverA

Rebuild a server from an image (destroys all data on the boot volume).

Inputs: server_id (required), image (required). Returns: result

cloud_remove_firewall_from_resourcesC

Remove a firewall from the given resources.

Inputs: firewall_id (required), remove_from (required). Returns: result

cloud_remove_lb_targetC

Remove a target from a load balancer.

Inputs: load_balancer_id (required), type (required), server, label_selector, +1 more. Returns: result

cloud_reset_serverC

Hardware reset a cloud server.

Inputs: server_id (required). Returns: result

cloud_reset_server_passwordB

Reset root password (Linux only). New password is returned in the response.

Inputs: server_id (required). Returns: result

cloud_resize_volumeB

Resize a volume. Can only grow, not shrink. Filesystem grow happens online.

Inputs: volume_id (required), size (required). Returns: result

cloud_set_firewall_rulesB

Replace all rules of a firewall with the given list.

Inputs: firewall_id (required), rules (required). Returns: result

cloud_shutdown_serverA

ACPI shutdown a cloud server (graceful).

Inputs: server_id (required). Returns: result

cloud_unassign_floating_ipC

Unassign a floating IP from its current server.

Inputs: floating_ip_id (required). Returns: result

cloud_unassign_primary_ipB

Unassign a primary IP from its current server.

Inputs: primary_ip_id (required). Returns: result

cloud_update_firewallC

Update a firewall's name or labels.

Inputs: firewall_id (required), name, labels. Returns: result

cloud_update_floating_ipC

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

Inputs: floating_ip_id (required), name, description, labels. Returns: result

cloud_update_imageB

Update an image. Only user-created images (snapshots/backups) can be updated.

Inputs: image_id (required), description, type, labels. Returns: result

cloud_update_load_balancerC

Update a load balancer's name or labels.

Inputs: load_balancer_id (required), name, labels. Returns: result

cloud_update_networkC

Update a network's name, labels or vSwitch route exposure.

Inputs: network_id (required), name, labels, expose_routes_to_vswitch. Returns: result

cloud_update_placement_groupB

Update a placement group's name or labels.

Inputs: placement_group_id (required), name, labels. Returns: result

cloud_update_primary_ipB

Update primary IP name, auto_delete behaviour or labels.

Inputs: primary_ip_id (required), name, auto_delete, labels. Returns: result

cloud_update_serverC

Update a cloud server's name or labels.

Inputs: server_id (required), name, labels. Returns: result

cloud_update_ssh_keyB

Update an SSH key's name or labels.

Inputs: ssh_key_id (required), name, labels. Returns: result

cloud_update_volumeC

Update a volume's name or labels.

Inputs: volume_id (required), name, labels. Returns: result

dns_bulk_create_recordsB

Create multiple DNS records in one call. Each item: {zone_id,type,name,value[,ttl]}.

Inputs: records (required). Returns: result

dns_bulk_update_recordsB

Update multiple DNS records in one call. Each item must include id.

Inputs: records (required). Returns: result

dns_create_primary_serverB

Register a primary server for a secondary DNS zone.

Inputs: zone_id (required), address (required), port. Returns: result

dns_create_recordC

Create a DNS record. type e.g. 'A','AAAA','CNAME','MX','TXT','NS','SRV','CAA'.

Inputs: zone_id (required), type (required), name (required), value (required), +1 more. Returns: result

dns_create_zoneC

Create a DNS zone for a domain (e.g. 'example.com').

Inputs: name (required), ttl. Returns: result

dns_delete_primary_serverC

Delete a primary server.

Inputs: primary_server_id (required). Returns: result

dns_delete_recordC

Delete a DNS record.

Inputs: record_id (required). Returns: result

dns_delete_zoneB

Delete a DNS zone. All records in the zone are also removed.

Inputs: zone_id (required). Returns: result

dns_export_zone_fileB

Export the zone as a BIND-format zone file (string).

Inputs: zone_id (required). Returns: result

dns_get_primary_serverB

Get a single primary server by ID.

Inputs: primary_server_id (required). Returns: result

dns_get_recordA

Get a single DNS record by ID.

Inputs: record_id (required). Returns: result

dns_get_zoneC

Get a single DNS zone by ID.

Inputs: zone_id (required). Returns: result

dns_import_zone_fileA

Import records into an existing zone from a BIND zone file (replaces all records).

Inputs: zone_id (required), zone_file (required). Returns: result

dns_list_primary_serversC

List secondary-DNS primary servers configured for zones.

Inputs: zone_id. Returns: result

dns_list_recordsC

List DNS records. If zone_id is provided, filter to that zone.

Inputs: zone_id, page, per_page. Returns: result

dns_list_zonesC

List DNS zones.

Inputs: page, per_page, name, search_name. Returns: result

dns_update_primary_serverC

Update a primary server.

Inputs: primary_server_id (required), zone_id (required), address (required), port. Returns: result

dns_update_recordC

Update a DNS record. All fields are required by the API.

Inputs: record_id (required), zone_id (required), type (required), name (required), +2 more. Returns: result

dns_update_zoneC

Update a DNS zone.

Inputs: zone_id (required), name, ttl. Returns: result

dns_validate_zone_fileB

Validate a BIND zone file without importing it.

Inputs: zone_file (required). Returns: result

hetzner_healthA

Report which API tokens are configured. Does not make network calls.

Inputs: no named parameters. Returns: object

sb_change_storage_box_typeB

Resize a Storage Box by changing its type (bx11 -> bx21 etc.).

Inputs: storage_box_id (required), storage_box_type (required). Returns: result

sb_create_snapshotC

Create an on-demand snapshot of a Storage Box.

Inputs: storage_box_id (required), description, labels. Returns: result

sb_create_storage_boxC

Create a new Storage Box.

location e.g. 'fsn1' | 'nbg1' | 'hel1'. storage_box_type e.g. 'bx11' (1TB), 'bx21' (5TB), 'bx31' (10TB), 'bx41' (20TB).

Inputs: name (required), location (required), storage_box_type (required), password, +3 more. Returns: result

sb_create_sub_accountC

Create a sub-account scoped to home_directory within the Storage Box.

Inputs: storage_box_id (required), home_directory (required), password, ssh_keys, +4 more. Returns: result

sb_delete_snapshotD

Delete a snapshot.

Inputs: storage_box_id (required), snapshot_id (required). Returns: result

sb_delete_storage_boxB

Delete a Storage Box. This permanently destroys all data!

Inputs: storage_box_id (required). Returns: result

sb_delete_sub_accountC

Delete a sub-account.

Inputs: storage_box_id (required), sub_account_id (required). Returns: result

sb_get_snapshotC

Get a single snapshot.

Inputs: storage_box_id (required), snapshot_id (required). Returns: result

sb_get_snapshot_planC

Get the automatic snapshot plan for a Storage Box.

Inputs: storage_box_id (required). Returns: result

sb_get_storage_boxA

Get a single Storage Box by ID.

Inputs: storage_box_id (required). Returns: result

sb_get_sub_accountC

Get a single sub-account.

Inputs: storage_box_id (required), sub_account_id (required). Returns: result

sb_list_snapshotsC

List snapshots of a Storage Box.

Inputs: storage_box_id (required), page, per_page. Returns: result

sb_list_storage_boxesC

List Storage Boxes in the project.

Inputs: page, per_page, name, label_selector, +1 more. Returns: result

sb_list_storage_box_locationsC

List locations where Storage Boxes can be provisioned.

Inputs: page, per_page, name. Returns: result

sb_list_storage_box_typesC

List available Storage Box types (bx11, bx21, bx31, bx41) and pricing.

Inputs: page, per_page, name. Returns: result

sb_list_sub_accountsB

List sub-accounts of a Storage Box.

Inputs: storage_box_id (required), page, per_page. Returns: result

sb_reset_storage_box_passwordC

Reset the password for a Storage Box.

Inputs: storage_box_id (required), password. Returns: result

sb_reset_sub_account_passwordC

Reset a sub-account's password.

Inputs: storage_box_id (required), sub_account_id (required), password. Returns: result

sb_rollback_storage_box_to_snapshotB

Rollback a Storage Box to a snapshot. Existing data after that snapshot is lost.

Inputs: storage_box_id (required), snapshot_id (required). Returns: result

sb_update_snapshotB

Update a snapshot's description or labels.

Inputs: storage_box_id (required), snapshot_id (required), description, labels. Returns: result

sb_update_snapshot_planA

Configure the automatic snapshot schedule for a Storage Box.

Unset fields default to wildcard (-1 in some encodings). Pass max_snapshots=0 to effectively disable retention.

Inputs: storage_box_id (required), max_snapshots, minute, hour, +2 more. Returns: result

sb_update_storage_boxB

Update a Storage Box's name or labels.

Inputs: storage_box_id (required), name, labels. Returns: result

sb_update_storage_box_access_settingsC

Toggle protocol availability and external reachability for a Storage Box.

Inputs: storage_box_id (required), samba_enabled, ssh_enabled, webdav_enabled, +2 more. Returns: result

sb_update_sub_accountC

Update a sub-account.

Inputs: storage_box_id (required), sub_account_id (required), description, labels. Returns: result

sb_update_sub_account_access_settingsC

Update a sub-account's access / protocol settings.

Inputs: storage_box_id (required), sub_account_id (required), home_directory, samba_enabled, +4 more. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3/5.0

    Scored across 137 tools

    Disambiguation5/5

    All tools have clearly distinct purposes through specific verb-noun combinations and detailed descriptions. Even for similar resources (e.g., load balancer services vs targets), the actions are unique and well-defined.

    Naming Consistency5/5

    Tool names follow a consistent pattern: prefix indicating service (cloud_, dns_, sb_, hetzner_) + verb + noun in snake_case. The verb tense is uniform (imperative present) and the structure is predictable across all 137 tools.

    Tool Count2/5

    With 137 tools, the server is extremely large and exceeds the typical scope for a single MCP server. While the tools are necessary for complete Hetzner API coverage, the count is far beyond the recommended range and would benefit from decomposition into separate servers per service domain.

    Completeness5/5

    The tool set offers comprehensive CRUD and lifecycle operations for all exposed Hetzner services: compute, networking, storage, DNS, firewalls, load balancers, and more. No obvious gaps are present for the intended domain coverage.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      F
      maintenance
      Enables users to manage Hetzner Cloud resources including servers, load balancers, and volumes through natural language commands. It facilitates infrastructure operations such as resource creation, security configuration, and real-time pricing queries within AI-powered environments.
      173 npm
      1
      -
    • 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
    • A
      license
      Not graded
      quality
      F
      maintenance
      Enables management of Hetzner Cloud resources including servers, SSH keys, volumes, storage boxes, and live metrics through 40 tools.
      8 npm
      MIT