You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Initial release: an MCP server for ntfy, covering
publishing, reading the message cache, and user and topic-access
administration.
A multi-architecture container image at ghcr.io/ni-c/ntfy-mcp
(amd64 and arm64), published with an SBOM and build provenance. It runs as
an unprivileged user with no npm in the runtime layer and speaks stdio
only, so it needs -i and exposes no port.
NTFY_ALLOW_TOOLS and NTFY_DENY_TOOLS narrow the tool list by name or by a
trailing-* prefix, and NTFY_ALLOW_TOOLS=essential selects a curated six
that cover publishing and verifying end to end.
NTFY_TOPICS names the topics the server may touch. The first entry is the
default when a tool omits one, which keeps a topic name — a bearer secret on a
public instance — out of the tool arguments; the list also bounds every read
and write tool.
Basic authentication (NTFY_USERNAME / NTFY_PASSWORD) alongside access
tokens (NTFY_TOKEN), because ntfy user add produces a username and
password rather than a token. Setting both forms is refused at startup rather
than resolved by a precedence rule.
Security
NTFY_READ_ONLY defaults to false, unlike the same variable in imap-mcp, where it defaults to true.
ntfy exists to publish; a read-only default would ship a notification server
that cannot notify. Because of that direction, only the literal string true
disables the write tools — a typo leaves them enabled. The destructive tools
are gated behind confirmation tokens and ntfy's own permissions instead, and NTFY_ALLOW_TOOLS=essential or a NTFY_DENY_TOOLS list is the recommended
hardening.
delete_messages, delete_user and manage_user_access require a
server-generated confirmation token bound to a fingerprint of the exact
target, so a confirmation for one target cannot execute another or a longer
list.
Access tokens are removed from get_account output. ntfy returns every token
of the account in plaintext there, which would otherwise put a live credential
into the conversation transcript. The account's sync_topic is removed for the
same reason — a topic name is a bearer secret.
click, icon, attach and every action button URL are restricted to http: and https:. ntfy stores whatever it is given, and these URLs are
opened by the recipient's device rather than by the server.
Publishing cannot send email or place a phone call, and no tool creates,
reads or exchanges an ntfy access token.