Hetzner Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Hetzner Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
An MCP server that gives Claude Code 40 tools to manage Hetzner Cloud — servers, SSH keys, Cloud Volumes, Storage Boxes, and live metrics.
npm install -g @jurislm/hetzner-mcpAdd 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.
| 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. |
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.
⚠️ marks destructive or hard-to-reverse operations.
| 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) | ⚠️ |
| 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 | ⚠️ |
| 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 |
| 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 | ⚠️ |
| Tool | Description |
|---|---|
hetzner_get_server_metrics | CPU, disk I/O, and network metrics — defaults to the last 5 minutes |
| 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/.
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 |
This MCP can:
This MCP cannot:
⚠️ Creating servers costs real money. Hetzner bills by the hour — acx22runs ~€0.006/hr (~€4/mo), acx52runs ~€0.119/hr (~€86/mo). Always delete servers you are not using.
`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.
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=0To test locally without publishing:
HETZNER_API_TOKEN="your-token" bun dist/index.jsMIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.