npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@aiwerk/mcp-server-hetzner

v0.1.1

Published

Hetzner Cloud API MCP server — full vendor surface (189 tools, BYOK, DRY_RUN + READ_ONLY)

Readme

@aiwerk/mcp-server-hetzner

Full-surface Hetzner Cloud MCP server — 189 tools covering the entire Hetzner Cloud + DNS API. BYOK, DRY_RUN and READ_ONLY safety layers.

Install

npx -y @aiwerk/mcp-server-hetzner

Configure

Add to your MCP client config (e.g. Claude Desktop config.json):

{
  "mcpServers": {
    "hetzner": {
      "command": "npx",
      "args": ["-y", "@aiwerk/mcp-server-hetzner"],
      "env": {
        "HCLOUD_TOKEN": "<your-api-token>"
      }
    }
  }
}

Environment variables

| Variable | Required | Default | Description | |---|---|---|---| | HCLOUD_TOKEN | Yes | — | Hetzner Cloud API token (Bearer). Create at Hetzner Console → Project → Security → API Tokens. | | HETZNER_API_TIMEOUT_MS | No | 30000 | Request timeout in milliseconds. | | DRY_RUN | No | 0 | Set to 1 to intercept all write operations without touching the API. Logs the would-be request to stderr. Useful for agent debugging. | | READ_ONLY | No | 0 | Set to 1 to refuse all write operations entirely. Takes precedence over DRY_RUN. Useful for ops safety. |

Auth

Create an API token at Hetzner Console → Your Project → Security → API Tokens.

  • Read-only token: safe for listing resources, no billing risk.
  • Read-write token: required for creating/modifying/deleting resources. Note that writes to Servers, Volumes, Load Balancers, Floating IPs, and Primary IPs incur Hetzner billing.

Safety layers

Two independent safety layers protect against accidental writes:

| Mode | Behavior on writes | |---|---| | DRY_RUN=1 | Logs the would-be request to stderr, returns { dry_run: true, would_send: { method, path, body, query } }. Read operations pass through normally. | | READ_ONLY=1 | Refuses all write operations with a clear error. Takes precedence over DRY_RUN. Read operations pass through normally. |

When both are set, READ_ONLY wins.

What we guarantee (testable)

These promises are backed by tests that fail if the safety code is removed.

Tools (189)

Tools cover the full vendor surface across 31 tag groups:

| Tag group | Count | |---|---| | Server Actions | 27 | | Load Balancer Actions | 17 | | Network Actions | 10 | | Floating IP Actions | 8 | | Primary IP Actions | 8 | | Volume Actions | 8 | | Zone Actions | 8 | | Firewall Actions | 7 | | Load Balancers | 6 | | Servers | 6 | | Zones | 6 | | Zone RRSet Actions | 6 | | Certificates | 5 | | Certificate Actions | 5 | | Firewalls | 5 | | Floating IPs | 5 | | Image Actions | 5 | | Networks | 5 | | Placement Groups | 5 | | Primary IPs | 5 | | SSH Keys | 5 | | Volumes | 5 | | Zone RRSets | 5 | | Images | 4 | | Actions | 2 | | Data Centers | 2 | | ISOs | 2 | | Load Balancer Types | 2 | | Locations | 2 | | Server Types | 2 | | Pricing | 1 |

Key tools

| Tool | Description | |---|---| | list_servers | List all servers (paginated). | | get_server | Get a single server by ID. | | create_server | Create a new server. Billing starts immediately. | | delete_server | Delete a server. Irreversible. | | poweron_server / poweroff_server | Power operations. | | create_server_image | Create a snapshot of a server. | | list_locations | List available locations (cheapest read-only call, safe for smoke tests). | | list_volumes | List block volumes. | | list_load_balancers | List load balancers. | | list_firewalls | List firewalls. | | set_firewall_rules | Replaces ALL existing rules. Read current state first via get_firewall. | | list_zones | List DNS zones. | | list_zone_rrsets | List DNS record sets in a zone. |

Pagination

All list_* tools accept page (default 1) and per_page (default 25, max 50). Check meta.pagination.last_page and meta.pagination.total_entries in the response to determine if more pages exist.

Plural vs singular action tools

Hetzner distinguishes per-resource and project-wide action endpoints by pluralizing the resource noun:

  • list_server_actions(server_id) — actions for ONE specific server
  • list_servers_actions() — all server actions across the project

Same pattern applies to: certificates, firewalls, floating_ips, images, load_balancers, networks, primary_ips, volumes, zones.

Development

# Install
npm install

# Generate tools from OpenAPI spec
npm run generate

# Build
npm run build

# Test (all 243 tests including 13 safety-claim tests)
npm test

# Smoke test
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | HCLOUD_TOKEN=<token> node dist/src/server.js
echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"create_server","arguments":{"name":"test","server_type":"cx22","image":"ubuntu-24.04","location":"fsn1"}}}' | HCLOUD_TOKEN=<token> DRY_RUN=1 node dist/src/server.js

License

MIT — AIWerk