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.
<div align="center">
Model Context Protocol server for full Hetzner Cloud + Storage API automation
Expose 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.
</div>
pipx install hetzner-mcp
hetzner-mcp installThen set your token and restart your MCP client:
export HETZNER_TOKEN="your_token_here"Or configure it once via CLI (persisted local config):
hetzner-mcp auth set --token "your_token_here"hetzner-mcp loads official OpenAPI specs from Hetzner and exposes operations as MCP tools.
https://api.hetzner.cloud/v1https://api.hetzner.com/v1| Tool | What it does |
|---|---|
list_api_operations | List all operations with filters (domain/tag/method/query) |
search_api_operations | Search operations by keyword |
get_api_operation_details | Inspect full operation details and input schema |
list_api_categories | List all API categories/tags with docs descriptions |
get_api_category_details | Explain one category in depth with all endpoints inside |
list_api_projects | Show configured project profiles and active credential context |
set_active_api_project | Switch active project profile for agent execution context |
wait_for_action | Poll cloud/storage actions until completion |
All API operations are also exposed directly as tools using the official operation ID names (for example create_server, get_action, create_storage_box).
For agent-friendly documentation, every endpoint and category also has dedicated guide tools:
guide_<operation_id>guide_create_servercategory_guide_<api_domain>_<category_slug>category_guide_cloud_serversThese guide tools include docs text from the OpenAPI documentation, explicit purpose, parameter explanations, and example tool arguments.
This server enforces a docs-first workflow for endpoint execution:
guide_<operation_id> first for the endpoint you want to execute.create_server).If you skip step 1, execution is rejected with a docs_required error.
Unlocking is based on context freshness (interaction distance in the current session), not wall-clock time:
Current generated operation coverage:
You can verify this locally:
python scripts/verify_operation_coverage.py"List all Hetzner operations related to firewalls"
"Create a CX22 server in fsn1-dc14 with my SSH key"
"Attach volume 12345 to server 67890"
"Create a load balancer and add target server 1001"
"Enable rescue mode on server 123 and wait for action completion"
"Create a storage box and reset its password"
"Show operation details for update_storage_box_access_settings"You can configure auth in two ways:
1) Environment variables (recommended for CI/ephemeral environments) 2) Local CLI config file (recommended for local workstation use)
Environment variables (highest precedence):
HETZNER_TOKEN for both Cloud and Storage APIsHETZNER_CLOUD_TOKEN to override cloud auth tokenHETZNER_STORAGE_TOKEN to override storage auth tokenHETZNER_PROJECT to choose one configured local project profile for this sessionBase URL safety:
HETZNER_CLOUD_BASE_URL and HETZNER_STORAGE_BASE_URL are validated before any token is attached.HETZNER_ALLOW_CUSTOM_BASE_URLS=true.Local CLI config examples:
# set default token
hetzner-mcp auth set --token "your_token_here"
# auth set auto-probes what the provided key can do
# (cloud/storage + read/write capability hints)
# set per-domain overrides
hetzner-mcp auth set --cloud-token "cloud_token" --storage-token "storage_token"
# inspect effective token sources (env/file/unset)
hetzner-mcp auth show
# open full local config in your editor
hetzner-mcp config editMulti-project profile examples:
# create per-environment profiles
hetzner-mcp project add prod --description "Production Hetzner" --token "prod_token" --activate
hetzner-mcp project add staging --description "Staging Hetzner" --token "staging_token"
# project add also auto-detects capability hints for entered keys
# see which profile is active and what each one is for
hetzner-mcp project list
# switch active profile
hetzner-mcp project use stagingCapability probing notes:
auth set and project add automatically probe entered keys and print capability hints.cloud:read+write, storage:no-access).GET/POST checks and is best-effort guidance, not a formal permission matrix.Config file location:
~/.config/hetzner-mcp/config.json (macOS/Linux)%APPDATA%\\hetzner-mcp\\config.json (Windows)HETZNER_MCP_CONFIG_PATHOptional runtime controls:
HETZNER_CLOUD_BASE_URLHETZNER_STORAGE_BASE_URLHETZNER_TIMEOUT_SECONDSHETZNER_MAX_RETRIESHETZNER_BACKOFF_BASE_SECONDSAuto-configuration is included for:
| Client | Auto-config |
|---|---|
| Claude Desktop | Yes |
| Claude Code | Yes |
| Cursor | Yes |
| Cline | Yes |
| Windsurf | Yes |
| OpenCode | Yes |
Run:
hetzner-mcp installOpenCode integration note:
opencode.jsonc) under the mcp key.~/.opencode/mcp.json is not used.{
"mcpServers": {
"hetzner-mcp": {
"command": "hetzner-mcp-server",
"args": []
}
}
}| Command | Description |
|---|---|
hetzner-mcp status | Show effective runtime config + registry + client status |
hetzner-mcp doctor [--json] | Print detailed diagnostics |
hetzner-mcp server run [--refresh-specs] | Run stdio MCP server |
hetzner-mcp update | Refresh specs and re-apply client integration |
hetzner-mcp client install | Configure supported MCP clients |
hetzner-mcp client status | Show client config installation state |
hetzner-mcp client repair | Re-apply configuration entries |
hetzner-mcp client uninstall | Remove MCP config entries |
hetzner-mcp auth set ... | Configure API keys directly from CLI and auto-detect key capabilities |
hetzner-mcp auth show | Show token status and source |
hetzner-mcp auth clear [--all] | Clear stored token entries |
hetzner-mcp project add/list/show/use/remove | Manage multiple project credential profiles (with capability probing on add) |
hetzner-mcp config show | Show stored + effective config |
hetzner-mcp config get/set/unset <key> | Read/write persisted config keys |
hetzner-mcp config edit | Edit persisted config file in $EDITOR |
Legacy aliases still work: install, repair, uninstall, diagnose.
git clone https://github.com/devinoldenburg/hetzner-mcp.git
cd hetzner-mcp
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
# Validate quality
ruff check .
mypy src
pytest
# Refresh specs and inspect counts
python scripts/sync_specs.py
python scripts/verify_operation_coverage.pyHETZNER_ALLOW_CUSTOM_BASE_URLS=true.token, password, secret, and authorization to avoid leaking credentials into transcripts.set_active_api_project now switches the active project for the current MCP session by default; use persist=true only when you intentionally want to update local config.`ModuleNotFoundError: hetzner_mcp` in local scripts
pip install -e .No operations listed in MCP client
hetzner-mcp statushetzner-mcpAuth failures (`401 unauthorized`)
HETZNER_TOKEN or domain-specific token is exported in the client runtime environmentRate limiting (`429`)
MIT
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.