Hetzner Cloud MCP
Open Source · MIT License

Manage Hetzner Cloud with AI.

Two management layers in one MCP server. The Hetzner Cloud API controls your infrastructure. SSH connects to what’s running inside — services, logs, Nginx, MySQL, and system health. 60 tools total.

PHP 8.1+ MIT License Streamable HTTP
Two management layers

Cloud API + SSH in one MCP server.

33

Cloud API & DNS Tools

Server power, metrics, snapshots, backups, firewalls, DNS zones and records, rescue mode, server rebuild and rescale — all through the Hetzner Cloud API. Works even when the server OS is unresponsive.

27

SSH Tools

Restart services, read logs, check disk and memory, manage Nginx configs, run read-only MySQL queries, inspect cron jobs, control supervisor processes, check UFW status — via direct SSH.

Multi-Server

Configure 1 to N servers from a single MCP instance. Define names, aliases, and per-server SSH settings via environment variables. No code changes required.

Safety First

Confirm guards on all destructive operations. 29 blocked dangerous SSH command patterns. Read-only SQL enforcement. Tool annotations with readOnlyHint and destructiveHint on every tool.

Flexible Auth

Three modes: no auth (firewall-secured), API key, or API key + OAuth 2.1 with PKCE. Self-hosted, no mandatory accounts, no vendor lock-in.

Optional Layers

SSH tools and DNS tools register only when configured. Run API-only if you don’t need SSH. Add DNS management with a separate Hetzner DNS token. Graceful degradation by design.

Works with every MCP client
Claude Desktop
Claude.ai
Cursor
VS Code
Claude Code
ChatGPT
Windsurf
JetBrains
All 60 tools

What you can do.

Layer 1 — Hetzner Cloud API

· works even when the OS is down

Infrastructure-level control through the Hetzner Cloud API. Power management, snapshots, firewalls, DNS, server metrics, rescue mode, and more.

server_info
server_metrics
server_power_on
server_power_off
server_shutdown
server_reboot
server_reset
server_reset_password
server_rescue_enable
server_rescue_disable
server_rebuild
server_change_type
snapshot_create
snapshot_list
snapshot_delete
backup_enable
backup_disable
firewall_list
firewall_get
firewall_set_rules
firewall_apply_to_server
firewall_remove_from_server
project_servers_list
ssh_keys_list
action_status
dns_zones_list
dns_zone_get
dns_zone_create
dns_zone_delete
dns_records_list
dns_record_add
dns_record_update
dns_record_delete
DNS tools require a separate HETZNER_DNS_TOKEN

Layer 2 — SSH

· connects to what’s running inside your servers

OS-level management via direct SSH. Diagnose issues, restart services, read logs, check system health, manage Nginx and MySQL — without opening a terminal.

ssh_service_status
ssh_service_start
ssh_service_stop
ssh_service_restart
ssh_services_list
ssh_disk_usage
ssh_memory_usage
ssh_cpu_load
ssh_process_list
ssh_uptime
ssh_nginx_test
ssh_nginx_reload
ssh_nginx_sites_list
ssh_nginx_site_config
ssh_logs_nginx_error
ssh_logs_nginx_access
ssh_logs_syslog
ssh_logs_journal
ssh_logs_supervisor
ssh_mysql_databases
ssh_mysql_processlist
ssh_mysql_query
ssh_cron_list
ssh_supervisor_status
ssh_supervisor_restart
ssh_ufw_status
ssh_exec
SSH tools register only when SSH_KEY_PATH is configured
Just ask

How it works in practice.

Connect the MCP to Claude.ai, Claude Desktop, or the Claude mobile app. Then ask questions in plain language. Claude uses the right tools automatically.

You
I need a landing page for my new project. Set up a server, configure Nginx with SSL, and deploy the site to landing.myapp.com.
Build & Deploy
Claude
All set. Here's what I did on the web server:
Created the Nginx config for landing.myapp.com with a root at /var/www/landing, tested the config and reloaded Nginx. Added a DNS A record pointing landing.myapp.com to your server IP.
The site directory is ready. Drop your HTML files into /var/www/landing or tell me what to build and I'll write the code directly.
ssh_exec ssh_nginx_test ssh_nginx_reload dns_record_add ssh_nginx_sites_list
You
Spin up a new staging server, apply the web firewall, and set up DNS for staging.myapp.com.
Provisioning
Claude
Done. I created a CX22 server named staging in Falkenstein, applied your web-firewall rules (ports 80, 443, 3333), and added an A record for staging.myapp.com pointing to the new IP.
The server is running. SSH is ready on port 22. Want me to install Nginx and set up a Let's Encrypt certificate?
firewall_apply_to_server dns_record_add server_info
You
I just deployed a new version. Restart nginx and check if the site loads.
Operations
Claude
Nginx config test passed. Reloaded successfully on the web server.
I checked the access log — requests are coming in and returning 200. The last 5 entries show normal response times. Your deployment looks good.
ssh_nginx_test ssh_nginx_reload ssh_logs_nginx_access
You
I need to scale the production server to CX32 for the upcoming traffic spike. Take a snapshot first.
Scaling
Claude
Snapshot web-pre-scale-20260408 created and completed. I then shut down the web server, rescaled it from CX22 to CX32 (4 vCPUs, 8GB RAM), and powered it back on.
Server is back up. Nginx is responding, all 6 sites are returning 200. Uptime shows 0 min as expected after the restart. You now have double the RAM for the traffic spike.
snapshot_create server_shutdown server_change_type server_power_on ssh_nginx_sites_list
Why this MCP

The missing layer.

When I started building this, I looked at every Hetzner MCP server available — mcp-hetzner (Python), mcp-hetzner-go (Go), and a few others. They’re all good open-source projects, MIT-licensed, and they all wrap the Hetzner Cloud API well. You can create servers, manage firewalls, take snapshots.

But none of them could tell me why my site was down.

The Cloud API manages infrastructure — it sees servers as boxes you power on and off. It can’t read your nginx error logs, restart a crashed service, check which MySQL queries are stuck, or tell you that your server ran out of memory 4 minutes ago. For that, you need SSH.

So this MCP has two layers: the Cloud API for infrastructure, and SSH for everything running inside. 33 API tools + 27 SSH tools = 60 tools total. You connect it to Claude.ai, open the mobile app on your phone, and ask “why is my website returning 502?” — and it actually checks, diagnoses, and can fix it. From your phone. While you’re on the train.

— Bogdan, WBF Solutions

Get started in minutes.

Clone, configure, deploy. Works with any PHP 8.1+ server.

  • 1 Clone the repository
  • 2 Copy .env.example and add your Hetzner API token
  • 3 Run composer install
  • 4 Point Nginx to api.php
  • 5 Connect from Claude, Cursor, or VS Code
# clone
~ git clone https://github.com/wbf-solutions/hetzner-cloud-mcp.git
~ cd hetzner-cloud-mcp
 
# configure
~ cp .env.example .env
~ composer install
 
# connect from Claude Desktop
~ URL: https://your-server/api.php
Works with every MCP client
Claude Desktop
Claude.ai
Cursor
VS Code
Claude Code
ChatGPT
Windsurf
JetBrains
About WBF.Solutions

Hi, I’m Bogdan.

I built WBF.Solutions — open-source developer tools and MCP servers for managing cloud infrastructure and e-commerce platforms. Based in Bucharest, Romania, with 18+ years of experience delivering web platforms across Europe.

I manage production Hetzner servers daily, build PrestaShop-based e-commerce for clients, and automate everything I can with AI tooling. The tools on this page are what I use in production — they exist because I needed them.

More from WBF.Solutions

MCP Servers for e-commerce & CMS.

PS

PrestaShop MCP

MIT Commercial

148 tools for products, orders, customers, SEO, security, marketing, translations, and more. Connect Claude, Cursor, or any MCP client to your PrestaShop store.

Coming Soon

WordPress MCP

MIT Commercial

131 tools for content, media, Elementor, WPBakery, plugins, themes, users, and security. Connect Claude Desktop, Cursor, or any MCP client to your WordPress sites.

Coming Soon