Hetzner console MCP

An MCP server and a web console over the whole Hetzner Cloud API, in your projects — with a guard that keeps it from touching what your Rockslab clusters run.

6 min

What it is

Rockslab builds clusters in your Hetzner project and deliberately keeps no other write power there. When you do want an agent — or a person in a browser — to manage the project itself, there is the Hetzner console: an MCP server and a web UI over the Hetzner Cloud API.

It lists, creates, changes and deletes everything a project holds: servers, volumes, networks and subnets, firewalls, load balancers, floating and primary IPs, SSH keys, images and snapshots, certificates, placement groups, DNS zones and records. Plus prices, metrics and Hetzner's own action log.

It runs two ways:

  • As your organization's door — on your platform cluster, installed by Rockslab, at mcp.pub.<your domain>. You sign in with your Rockslab login or a Rockslab API token.
  • Standalone — in any Kubernetes cluster, or docker run, with no Rockslab at all. See Run it standalone.

The guard

Everything a Rockslab cluster runs carries labels under rockslab.io/: its machines, the autoscaler's machines, its network, firewall, volumes. The console refuses every change to those — delete, power, rebuild, relabel, attach — and the refusal names the cluster. Change a cluster through Rockslab instead.

So an agent can tidy up your project without tidying away your production cluster. We sleep better; so will you.

Find your door

Your platform cluster's page lists it among the doors as mcp. The MCP endpoint is that address plus /mcp. No platform cluster yet? Building one is the way in. A platform with no mcp door? Write to support — the door is installed by Rockslab, not from the app catalogue.

Connect an agent

claude mcp add --transport http hetzner https://mcp.pub.example.com/mcp \
  --header 'Authorization: Bearer ${ROCKSLAB_TOKEN}'

Replace example.com with your organization's domain. Agents that speak OAuth find the sign-in server at /.well-known/oauth-protected-resource.

Then the first three calls: get_whoami (who you are here and your role), list_capabilities (which tools that role may call, project by project) and list_projects. The console's own index is /llms.txt.

Roles

RoleMay
readevery list and get
writeread, plus every create, change and delete — each with confirm: true
adminwrite, plus projects kept to admins

With a Rockslab token, the role follows the token's role in your organization: owner and admin → admin, operator → write, member → read. A token from another organization is refused, and so is one scoped to part of yours.

Which Hetzner key it uses

By default the door uses your cloud account's own token. You can give it a separate one under Credentials › + Credential › Rockslab MCP (the card says the key the MCP server in your cluster talks to Hetzner with — yes, the name is a little confusing; we know). A Read token there lets an assistant look without touching anything.

The request budget

Hetzner allows 3,600 API requests an hour per project, shared by everything holding a token for it — your clusters' own controllers included. The console caches lists for about 20 seconds, so ten callers cost one request, and shows how much of the hour is left. Polling once every 30–60 seconds is plenty.

Run it standalone

No Rockslab needed. The image is public: registry.gitlab.com/rockslab-public/images/hcloud-mcp:<version>. On a laptop:

docker run --rm -p 8080:8080 -e HCLOUD_TOKEN=<project token> \
  -e AUTH_MODE=none -e PUBLIC_URL=http://localhost:8080 \
  registry.gitlab.com/rockslab-public/images/hcloud-mcp:<version>

AUTH_MODE=none lets every caller write, so it is accepted only on localhost. In a cluster you give it one Secret with a token per project, a session key, and access keys for people and agents:

hcloud-mcp keys new --id alice --role admin

It prints the key once (hck_alice_…) and the kubectl line that stores its hash. The console re-reads its Secrets every 30 seconds, so adding or revoking someone needs no restart. Projects can be kept to admins, or made read-only for everyone, in its settings. Full setup — every setting, OIDC sign-in, the create template — is in the README beside the image.

Was this page useful? Updated Oct 22, 2026