Send, manage, and replay ntfy push notifications via MCP.
Connect Runs on your machine
claude mcp add ntfy-mcp-server -e NTFY_SERVERS=<NTFY_SERVERS> -e NTFY_BASE_URL=<NTFY_BASE_URL> -e NTFY_DEFAULT_TOPIC=<NTFY_DEFAULT_TOPIC> -e NTFY_AUTH_TOKEN=<NTFY_AUTH_TOKEN> -e NTFY_AUTH_USERNAME=<NTFY_AUTH_USERNAME> -e NTFY_AUTH_PASSWORD=<NTFY_AUTH_PASSWORD> -e NTFY_REQUEST_TIMEOUT_MS=<NTFY_REQUEST_TIMEOUT_MS> -e NTFY_MAX_RETRIES=<NTFY_MAX_RETRIES> -e NTFY_BLOCK_PRIVATE_HOSTS=<NTFY_BLOCK_PRIVATE_HOSTS> -e NTFY_ENABLE_EMOJI_TAGS=<NTFY_ENABLE_EMOJI_TAGS> -e MCP_LOG_LEVEL=<MCP_LOG_LEVEL> -e LOGS_DIR=<LOGS_DIR> -e OTEL_ENABLED=<OTEL_ENABLED> -- npx -y [email protected]
{
"mcpServers": {
"ntfy-mcp-server": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"NTFY_SERVERS": "<NTFY_SERVERS>",
"NTFY_BASE_URL": "<NTFY_BASE_URL>",
"NTFY_DEFAULT_TOPIC": "<NTFY_DEFAULT_TOPIC>",
"NTFY_AUTH_TOKEN": "<NTFY_AUTH_TOKEN>",
"NTFY_AUTH_USERNAME": "<NTFY_AUTH_USERNAME>",
"NTFY_AUTH_PASSWORD": "<NTFY_AUTH_PASSWORD>",
"NTFY_REQUEST_TIMEOUT_MS": "<NTFY_REQUEST_TIMEOUT_MS>",
"NTFY_MAX_RETRIES": "<NTFY_MAX_RETRIES>",
"NTFY_BLOCK_PRIVATE_HOSTS": "<NTFY_BLOCK_PRIVATE_HOSTS>",
"NTFY_ENABLE_EMOJI_TAGS": "<NTFY_ENABLE_EMOJI_TAGS>",
"MCP_LOG_LEVEL": "<MCP_LOG_LEVEL>",
"LOGS_DIR": "<LOGS_DIR>",
"OTEL_ENABLED": "<OTEL_ENABLED>"
}
}
}
}
{
"mcpServers": {
"ntfy-mcp-server": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"NTFY_SERVERS": "<NTFY_SERVERS>",
"NTFY_BASE_URL": "<NTFY_BASE_URL>",
"NTFY_DEFAULT_TOPIC": "<NTFY_DEFAULT_TOPIC>",
"NTFY_AUTH_TOKEN": "<NTFY_AUTH_TOKEN>",
"NTFY_AUTH_USERNAME": "<NTFY_AUTH_USERNAME>",
"NTFY_AUTH_PASSWORD": "<NTFY_AUTH_PASSWORD>",
"NTFY_REQUEST_TIMEOUT_MS": "<NTFY_REQUEST_TIMEOUT_MS>",
"NTFY_MAX_RETRIES": "<NTFY_MAX_RETRIES>",
"NTFY_BLOCK_PRIVATE_HOSTS": "<NTFY_BLOCK_PRIVATE_HOSTS>",
"NTFY_ENABLE_EMOJI_TAGS": "<NTFY_ENABLE_EMOJI_TAGS>",
"MCP_LOG_LEVEL": "<MCP_LOG_LEVEL>",
"LOGS_DIR": "<LOGS_DIR>",
"OTEL_ENABLED": "<OTEL_ENABLED>"
}
}
}
}
{
"servers": {
"ntfy-mcp-server": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"NTFY_SERVERS": "<NTFY_SERVERS>",
"NTFY_BASE_URL": "<NTFY_BASE_URL>",
"NTFY_DEFAULT_TOPIC": "<NTFY_DEFAULT_TOPIC>",
"NTFY_AUTH_TOKEN": "<NTFY_AUTH_TOKEN>",
"NTFY_AUTH_USERNAME": "<NTFY_AUTH_USERNAME>",
"NTFY_AUTH_PASSWORD": "<NTFY_AUTH_PASSWORD>",
"NTFY_REQUEST_TIMEOUT_MS": "<NTFY_REQUEST_TIMEOUT_MS>",
"NTFY_MAX_RETRIES": "<NTFY_MAX_RETRIES>",
"NTFY_BLOCK_PRIVATE_HOSTS": "<NTFY_BLOCK_PRIVATE_HOSTS>",
"NTFY_ENABLE_EMOJI_TAGS": "<NTFY_ENABLE_EMOJI_TAGS>",
"MCP_LOG_LEVEL": "<MCP_LOG_LEVEL>",
"LOGS_DIR": "<LOGS_DIR>",
"OTEL_ENABLED": "<OTEL_ENABLED>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
NTFY_SERVERSOptional | JSON array of `{ baseUrl, authToken? | authUsername?+authPassword? }` entries — one per ntfy server. First entry is the default base. Auth is scoped to the entry's `baseUrl`; per-call `base_url` overrides that match a registered base forward that server's auth. Takes precedence over the single-serv… |
NTFY_BASE_URLOptional | Single-server shorthand — base URL of the ntfy server (no trailing slash). Used when NTFY_SERVERS is unset. |
NTFY_DEFAULT_TOPICOptional | Topic used when a tool call omits `topic`. Treat the topic name as a secret — anyone who knows it can publish or subscribe. |
NTFY_AUTH_TOKENOptional | Bearer access token (`tk_…`) for the single-server shorthand. Mutually exclusive with NTFY_AUTH_USERNAME / NTFY_AUTH_PASSWORD. |
NTFY_AUTH_USERNAMEOptional | Basic-auth username for the single-server shorthand — must be set together with NTFY_AUTH_PASSWORD. |
NTFY_AUTH_PASSWORDOptional | Basic-auth password for the single-server shorthand — must be set together with NTFY_AUTH_USERNAME. |
NTFY_REQUEST_TIMEOUT_MSOptional | Per-attempt HTTP timeout in milliseconds, covering the response body. Each call is also capped at 50 s across all attempts. |
NTFY_MAX_RETRIESOptional | Max retry attempts for transient upstream failures (5xx, network, 429). |
NTFY_BLOCK_PRIVATE_HOSTSOptional | When true, a per-call `base_url` override must resolve to a public address and its redirects are not followed. Servers registered under NTFY_SERVERS / NTFY_BASE_URL are exempt. Turn it on where callers you do not control can reach the server. |
NTFY_ENABLE_EMOJI_TAGSOptional | Set to false to disable the ntfy_search_emoji_tags tool: it leaves tools/list, and the server instructions and ntfy_publish_message stop pointing at it. |
MCP_LOG_LEVELOptional | Sets the minimum log level for output (e.g., 'debug', 'info', 'warn'). |
LOGS_DIROptional | Directory for file-based logs (Node only; ignored on Workers). |
OTEL_ENABLEDOptional | Enable OpenTelemetry instrumentation (spans, metrics, completion logs). |
Details
| Package | [email protected] (NPM, stdio) |
| Package | [email protected] (NPM, streamable-http) |
| First published | 29 Oct 2026 |
| Last updated | 29 Oct 2026 |
| Registry name | io.github.cyanheads/ntfy-mcp-server |
More other servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
