Hetzner Dns
FreeNot checkedAn MCP server for managing Hetzner DNS zones and RRSets via the Hetzner Cloud API. It enables listing, creating, updating, deleting, importing/exporting zone fi
About
An MCP server for managing Hetzner DNS zones and RRSets via the Hetzner Cloud API. It enables listing, creating, updating, deleting, importing/exporting zone files, and managing protection and TTLs from MCP clients.
README
A Model Context Protocol (MCP) server for managing DNS zones and records via the Hetzner Cloud API.
Lets MCP clients like Claude Code, Claude Desktop or Codex manage your Hetzner DNS: list, create, update and delete zones and RRSets (record sets), import/export zone files, manage protection and TTLs, and track asynchronous zone actions.
Note: This server targets the current DNS API that is part of the Hetzner Cloud API (
api.hetzner.cloud). The legacy DNS API (dns.hetzner.com) was shut down in May 2026 and is not supported.
Requirements
- Node.js ≥ 20
- A Hetzner Cloud API token for the project that holds your DNS zones — create one in the Hetzner Cloud Console under your project → Security → API tokens. Use a read & write token for full functionality (a read-only token limits you to the read tools).
Configuration
Configuration is provided via environment variables:
| Variable | Required | Description |
|---|---|---|
HETZNER_API_TOKEN |
yes | Hetzner Cloud API token (project-scoped) |
HETZNER_API_BASE_URL |
no | Base URL of the API (default: https://api.hetzner.cloud/v1) |
Installation
Claude Code
claude mcp add hetzner-dns -s user \
-e HETZNER_API_TOKEN=your-token \
-- npx -y mcp-hetzner-dns
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"hetzner-dns": {
"command": "npx",
"args": ["-y", "mcp-hetzner-dns"],
"env": {
"HETZNER_API_TOKEN": "your-token"
}
}
}
}
Codex
Add to your ~/.codex/config.toml:
[mcp_servers.hetzner-dns]
command = "npx"
args = ["-y", "mcp-hetzner-dns"]
env = { HETZNER_API_TOKEN = "your-token" }
From source
git clone https://github.com/ni-c/mcp-hetzner-dns.git
cd mcp-hetzner-dns
npm install
npm run build
# then use `node /path/to/mcp-hetzner-dns/dist/index.js` as the command
Tools
Zones
| Tool | Description |
|---|---|
list_zones |
List zones with status, mode, nameservers and record counts |
get_zone |
Get the full details of a single zone |
create_zone |
Create a primary or secondary zone, optionally from a zone file |
update_zone |
Replace the labels of a zone |
delete_zone |
Permanently delete a zone — requires confirm=true |
export_zonefile |
Export the zone as a BIND zone file |
import_zonefile |
Import a BIND zone file (replaces all records) — requires confirm=true |
change_zone_ttl |
Change the default TTL of a zone |
change_zone_protection |
Enable/disable delete protection |
change_primary_nameservers |
Replace the primary nameservers of a secondary zone |
RRSets (record sets)
| Tool | Description |
|---|---|
list_rrsets |
List the RRSets of a zone, filterable by name/type/labels |
get_rrset |
Get a single RRSet by name and type |
create_rrset |
Create a new RRSet with records |
update_rrset |
Replace the labels of an RRSet |
delete_rrset |
Permanently delete an RRSet — requires confirm=true |
set_records |
Replace all records of an RRSet |
add_records |
Add records to an RRSet (creates it if missing) |
remove_records |
Remove specific records from an RRSet |
change_rrset_ttl |
Change the TTL of an RRSet (or reset to the zone default with null) |
change_rrset_protection |
Enable/disable change protection |
Actions
| Tool | Description |
|---|---|
list_zone_actions |
List asynchronous zone operations (e.g. imports), filter by status |
get_zone_action |
Get a single action by ID to check its status |
Safety
delete_zone,delete_rrsetandimport_zonefilerefuse to run without an explicitconfirm=trueparameter and report what would be affected, so an MCP client can ask the user for confirmation first.- Tools carry MCP annotations (
readOnlyHint,destructiveHint,idempotentHint) so hosts can apply appropriate permission policies. set_recordsandremove_recordsare marked destructive because they drop existing records without a confirmation guard — review their input carefully.- Hetzner-side resource protection is honored: protected zones/RRSets return an error with a hint to the corresponding
change_*_protectiontool.
Development
npm install
npm run build # compile TypeScript to dist/
npm test # run the vitest test suite
npm run lint # eslint + prettier check
License
Installing Hetzner Dns
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/ni-c/mcp-hetzner-dnsFAQ
Is Hetzner Dns MCP free?
Yes, Hetzner Dns MCP is free — one-click install via Unyly at no cost.
Does Hetzner Dns need an API key?
No, Hetzner Dns runs without API keys or environment variables.
Is Hetzner Dns hosted or self-hosted?
A hosted option is available: Unyly runs the server in the cloud, no local setup required.
How do I install Hetzner Dns in Claude Desktop, Claude Code or Cursor?
Open Hetzner Dns on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
GitHub
PRs, issues, code search, CI status
by GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
by mcpdotdirectCompare Hetzner Dns with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All development MCPs
