npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@jurislm/hetzner-mcp

v1.5.0

Published

MCP server for managing Hetzner Cloud infrastructure

Downloads

128

Readme

Hetzner MCP Server

npm version

An MCP server that gives Claude Code 40 tools to manage Hetzner Cloud — servers, SSH keys, Cloud Volumes, Storage Boxes, and live metrics.


Quick Start

npm install -g @jurislm/hetzner-mcp

Add to your Claude Code MCP config (usually ~/.claude.json — run /mcp to confirm the location):

{
  "mcpServers": {
    "hetzner": {
      "type": "stdio",
      "command": "npx",
      "args": ["@jurislm/hetzner-mcp"],
      "env": {
        "HETZNER_API_TOKEN": "your-api-token-here"
      }
    }
  }
}

Restart Claude Code. Done.


Environment Variables

| Variable | Required | Description | |---|---|---| | HETZNER_API_TOKEN | ✅ | Cloud API token — Read & Write. Generate at console.hetzner.cloud → project → Security → API Tokens. | | HETZNER_API_TOKEN_UNIFIED | Storage Boxes only | Unified API token for Storage Box tools. Generate at console.hetzner.com/account/security/api-tokens. Falls back to HETZNER_API_TOKEN if unset, but a Cloud project token will return 401. |

Why two tokens?

Storage Box tools call api.hetzner.com/v1 (unified API), while all other tools call api.hetzner.cloud/v1 (Cloud API). The two endpoints use different token namespaces. If you want the simplest setup, generate a single unified token from console.hetzner.com and use it for both variables.


Available Tools (40 total)

⚠️ marks destructive or hard-to-reverse operations.

Servers (7)

| Tool | Description | ⚠️ | |------|-------------|:---:| | hetzner_list_servers | List all servers — status, IPs, specs, location | | | hetzner_get_server | Get full details for one server | | | hetzner_create_server | Create a new server (billed immediately) | | | hetzner_delete_server | Permanently delete a server and all its data | ⚠️ | | hetzner_power_on_server | Power on a stopped server | | | hetzner_power_off_server | Hard power off (equivalent to pulling the power cord) | ⚠️ | | hetzner_reboot_server | Hard reboot (equivalent to pressing the reset button) | ⚠️ |

SSH Keys (4)

| Tool | Description | ⚠️ | |------|-------------|:---:| | hetzner_list_ssh_keys | List all SSH keys in the project | | | hetzner_get_ssh_key | Get details for one SSH key | | | hetzner_create_ssh_key | Add a new SSH public key | | | hetzner_delete_ssh_key | Remove an SSH key | ⚠️ |

Reference (3)

| Tool | Description | |------|-------------| | hetzner_list_server_types | Available server sizes with CPU, RAM, disk, and pricing | | hetzner_list_images | Available OS images | | hetzner_list_locations | Available datacenters and their locations |

Cloud Volumes (4)

| Tool | Description | ⚠️ | |------|-------------|:---:| | hetzner_list_volumes | List all volumes — size, mount path, attached server | | | hetzner_get_volume | Get details for one volume | | | hetzner_attach_volume | Attach a volume to a server | ⚠️ | | hetzner_detach_volume | Detach a volume from its server | ⚠️ |

Server Metrics (1)

| Tool | Description | |------|-------------| | hetzner_get_server_metrics | CPU, disk I/O, and network metrics — defaults to the last 5 minutes |

Server RAM via SSH (1)

| Tool | Description | |------|-------------| | hetzner_get_server_ram | SSH into the server and run free -m to get RAM and swap usage (the Hetzner Metrics API does not expose memory metrics) |

Prerequisites for hetzner_get_server_ram: the server's public IPv4 must be reachable and the SSH private key must be available in the system SSH agent or ~/.ssh/.

Storage Boxes (20) — requires HETZNER_API_TOKEN_UNIFIED

Core

| Tool | Description | ⚠️ | |------|-------------|:---:| | hetzner_list_storage_boxes | List all Storage Boxes (auto-paginates) | | | hetzner_get_storage_box | Get details for one Storage Box | | | hetzner_create_storage_box | Create a new Storage Box (billed immediately) | | | hetzner_update_storage_box | Update name or labels | | | hetzner_delete_storage_box | Permanently delete a Storage Box | ⚠️ | | hetzner_change_storage_box_type | Upgrade or downgrade the Storage Box plan | ⚠️ | | hetzner_change_storage_box_protection | Enable or disable delete protection | | | hetzner_reset_storage_box_password | Reset the Storage Box password | ⚠️ | | hetzner_update_storage_box_access_settings | Configure SSH / Samba / WebDAV / ZFS / external access | |

Folders

| Tool | Description | |------|-------------| | hetzner_list_storage_box_folders | List folders inside a Storage Box |

Subaccounts

| Tool | Description | ⚠️ | |------|-------------|:---:| | hetzner_list_storage_box_subaccounts | List subaccounts (auto-paginates) | | | hetzner_create_storage_box_subaccount | Create a subaccount with scoped access | | | hetzner_update_storage_box_subaccount | Update subaccount settings | | | hetzner_delete_storage_box_subaccount | Delete a subaccount | ⚠️ |

Snapshots

| Tool | Description | ⚠️ | |------|-------------|:---:| | hetzner_list_storage_box_snapshots | List snapshots (auto-paginates) | | | hetzner_create_storage_box_snapshot | Trigger an on-demand snapshot | | | hetzner_delete_storage_box_snapshot | Delete a snapshot | ⚠️ | | hetzner_rollback_storage_box_snapshot | Roll back to a snapshot — overwrites current data | ⚠️ | | hetzner_enable_storage_box_snapshot_plan | Enable automatic scheduled snapshots | | | hetzner_disable_storage_box_snapshot_plan | Disable automatic scheduled snapshots | |


Capabilities and Limitations

This MCP can:

  • Create, manage, and monitor servers
  • Manage SSH keys, Cloud Volumes, and Storage Boxes
  • Report CPU, disk I/O, network, and RAM usage

This MCP cannot:

  • Create Hetzner projects (do that in the web console)
  • Manage billing, firewalls, load balancers, floating IPs, or networks
  • See resources outside the project whose token you provide

⚠️ Creating servers costs real money. Hetzner bills by the hour — a cx22 runs ~€0.006/hr (~€4/mo), a cx52 runs ~€0.119/hr (~€86/mo). Always delete servers you are not using.


Troubleshooting

HETZNER_API_TOKEN environment variable is required — token is missing from the MCP config env block. Restart Claude Code after adding it.

401 Unauthorized on Storage Box tools — you need a unified token from console.hetzner.com/account/security/api-tokens, not a Cloud project token. Set it as HETZNER_API_TOKEN_UNIFIED.

hetzner_get_server_ram connection error — check that the server is running, port 22 is reachable, and ssh_user (default root) has SSH access via a key loaded in the agent.


Development

bun install
bun run build       # compile TypeScript to dist/
bun run dev         # watch mode
bun run test        # vitest
bun run typecheck   # tsc --noEmit
bun run lint        # eslint --max-warnings=0

To test locally without publishing:

HETZNER_API_TOKEN="your-token" bun dist/index.js

License

MIT