Added
-
HETZNER_ALLOW_TOOLSandHETZNER_DENY_TOOLSchoose which of the 22 tools are
registered. Both take comma-separated tool names or a prefix with a trailing
*(list_*), the allow list decides what is in and the deny list is
subtracted from it, andHETZNER_ALLOW_TOOLS=essentialselects a curated eight
—list_zones,get_zone,list_rrsets,get_rrset,create_rrset,
set_records,delete_rrset,export_zonefile. A model picks the right tool
far more reliably from eight than from twenty-two, and every visible tool costs
context on every request. Nothing changes for an installation that sets
neither: all 22 are still registered.A filtered tool is not registered at all, so it is absent from
tools/list
and answerstools/callwith "tool not found" — the same cut
HETZNER_READ_ONLYalready makes, not a second, weaker one.An entry that matches no tool stops the server at startup, naming the entry
and listing the real names, rather than being ignored: an ignored typo leaves a
tool missing fromtools/listwith nothing pointing at the cause. The same
applies to a malformed pattern such as*_zone. UnderHETZNER_READ_ONLY, an
exact write-tool name in the allow list is refused with a message naming the
read-only setting instead of calling the tool unknown, while a pattern covering
write tools is accepted and simply contributes nothing.
Changed
- The README now carries the same eight badges, in the same order, as every other
MCP server in this family, all of them reading from npm rather than hard-coded;
the opening follows one shape; and the standalone "Full documentation" line is
gone, because the docs badge three lines above it points at the same page.
Fixed
- The container image no longer ships OpenSSL 3.5.7-r0, which carries
CVE-2026-14456 (denial of service via unbounded memory growth). The pinned
node:24-alpinedigest is already the newest one; Alpine's fixed 3.5.8-r0 has
simply not been rebuilt into it yet, so the runtime stage now upgrades
libcrypto3andlibssl3by name. Upgrading those two rather than running a
blanketapk upgradekeeps the rest of the image exactly as the digest pins
it. The step can go once the base image ships the fix.