Publish ntfy notifications, read the message cache, and manage users and topic access
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
A Model Context Protocol (MCP) server for ntfy, the pub-sub notification service that sends push messages to your phone with an HTTP request and nothing else.
Lets MCP clients like Claude Code, Claude Desktop or Codex send you notifications,
read back what was sent, revise a notification in place while a job runs, and β with
an admin account β create accounts and grant or revoke their access to topics, which
otherwise means the ntfy command line on the server.
Thirteen tools is the ceiling, not the floor: NTFY_ALLOW_TOOLS=essential registers
a curated six instead, and a model picks the right tool far more reliably from six
than from thirteen β see choosing which tools load.

A progress report stays one notification. The id publish_message returns is
also the notification's sequence id, and update_message replaces its content in
place β subscribers watch one notification change from "building" to "deployed"
instead of collecting five.
NTFY_TOPICS is the fence. On ntfy a topic name is a bearer credential:
knowing it is often the whole of the access control. One variable names the topics
this server may touch and supplies the default when a tool omits one, so the name
stays out of the tool arguments and out of the model's context.
| Variable | Required | Description |
|---|---|---|
NTFY_URL | yes | Base URL, e.g. https://ntfy.example.net. There is deliberately no default β https://ntfy.sh would make a misconfiguration publish to the public internet. |
NTFY_TOKEN | no | Access token (tk_β¦). Mutually exclusive with the two below. |
NTFY_USERNAME | no | Basic-auth user. Must be set together with NTFY_PASSWORD. |
NTFY_PASSWORD | no | Basic-auth password. |
NTFY_TOPICS | no | Comma-separated topics this server may use. The first is the default when a tool omits one, and the list restricts every tool, read and write β access grants included. |
NTFY_READ_ONLY | no | true, 1 or yes (any case) registers only the six read tools. Default false. |
NTFY_ALLOW_TOOLS | no | Comma-separated tool names, list_* prefixes, or essential for a curated preset |
NTFY_DENY_TOOLS | no | Same syntax; removed from whatever NTFY_ALLOW_TOOLS left |
NTFY_INSECURE_TLS | no | true accepts self-signed certificates (scoped to this connection) |
Setting NTFY_TOKEN together with NTFY_USERNAME/NTFY_PASSWORD is refused at
startup rather than resolved by a precedence rule: which credential is in force must
never be ambiguous.
Use
https://. Over plain http the credentials travel unencrypted β basic auth is base64, not encryption β and the server prints a warning unless the host is local. For self-signed certificates prefer a proper internal CA overNTFY_INSECURE_TLS.
Without configuration the server still starts and lists its tools (so registries and inspectors can introspect it), but every call fails with setup instructions instead of reaching the API.
NTFY_READ_ONLY defaults to false. ntfy exists to publish, and a read-only default
would ship a notification server that cannot notify β this is the opposite of
imap-mcp, where the same variable defaults to
true because a mailbox is an irreplaceable archive.
Two consequences worth knowing:
true, 1 and yes are all read as read-only, in
any case β a protection switch is parsed generously on purpose. But
NTFY_READ_ONLY=ture is not any of them, and because the default is permissive it
leaves the write tools enabled, where in imap-mcp it would fail closed.NTFY_TOPICS is the control that does.The recommended shape for anything unattended:
On a self-hosted instance, also give the server its own ntfy account with write-only
access to exactly the topics it needs.
NTFY_ALLOW_TOOLS and NTFY_DENY_TOOLS take comma-separated tool names; a trailing
* matches a whole family. essential is a curated preset β get_server_info,
check_topic_access, publish_message, list_messages, get_message and
update_message β marked as such in the
tool reference. Four of the six are read
tools, so the preset stays useful under NTFY_READ_ONLY=true.
An entry that matches no tool aborts startup and names it, so a typo cannot silently
hide a tool β an absent tool is not something anyone traces back to an environment
variable. A filtered tool is never registered, so it is absent from tools/list and
unknown to tools/call alike, exactly like a write tool under NTFY_READ_ONLY.
If you run several of these servers at once, mcp-hub is
the other answer β its /hub endpoint replaces every server's tools with six
meta-tools.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/ntfy)<a href="https://allmcps.com/mcp/ntfy"><img src="https://allmcps.com/api/badge/ntfy?style=directory" alt="Ntfy on AllMCPs" /></a>