Added
-
LINKWARDEN_ALLOW_TOOLSandLINKWARDEN_DENY_TOOLSchoose which of the 28
tools are registered. Both take comma-separated tool names or a prefix with a
trailing*(bulk_*), the allow list decides what is in and the deny list is
subtracted from it, andLINKWARDEN_ALLOW_TOOLS=essentialselects a curated
eight —search_links,get_link,get_link_content,list_collections,
list_tags,create_link,update_link,delete_link. A model picks the
right tool far more reliably from eight than from twenty-eight, and every
visible tool costs context on every request. Nothing changes for an
installation that sets neither: all 28 are still registered.A filtered tool is not registered at all, so it is absent from
tools/listand
answerstools/callwith "tool not found" — the same cutLINKWARDEN_READ_ONLY
already 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*_link. UnderLINKWARDEN_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.The tool reference marks the preset members, generated from the same constant
the filter reads, so the two cannot drift apart.
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.