Changelog
[Unreleased]
[0.1.0] - 2026-08-29
Added
- 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-iand exposes no port. - Thirteen tools. Six read:
list_messages,get_message,check_topic_access,get_server_info,get_account,list_users. Seven write:publish_message,update_message,mark_messages_read,delete_messages,create_user,delete_user,manage_user_access. NTFY_ALLOW_TOOLSandNTFY_DENY_TOOLSnarrow the tool list by name or by a trailing-*prefix, andNTFY_ALLOW_TOOLS=essentialselects a curated six that cover publishing and verifying end to end.NTFY_TOPICSnames 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), becausentfy user addproduces 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_ONLYdefaults tofalse, unlike the same variable in imap-mcp, where it defaults totrue. ntfy exists to publish; a read-only default would ship a notification server that cannot notify. Because of that direction, only the literal stringtruedisables the write tools — a typo leaves them enabled. The destructive tools are gated behind confirmation tokens and ntfy's own permissions instead, andNTFY_ALLOW_TOOLS=essentialor aNTFY_DENY_TOOLSlist is the recommended hardening.delete_messages,delete_userandmanage_user_accessrequire 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_accountoutput. ntfy returns every token of the account in plaintext there, which would otherwise put a live credential into the conversation transcript. The account'ssync_topicis removed for the same reason — a topic name is a bearer secret. click,icon,attachand every action button URL are restricted tohttp:andhttps:. 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.