Koskamo

ntfy-mcp-server

An MCP server that enables agents to send, manage, and replay push notifications via the ntfy service. It supports publishing messages with various options like priority and tags, updating or clearing existing notifications by sequence ID, polling topic history, and searching for emoji tags. It operates over STDIO or Streamable HTTP.

Package and access

Local package with source-attributed installation metadata. Koskamo does not execute packages during review.

ntfy-mcp-server logo, by cyanheadsCommunity listingLocal stdioSource reviewed; not executedPublished by cyanheads
Vendor documentation

Checks and signals

Each line is separate evidence, not a trust score.

  • Popularity 25 GitHub stars

What you can do with it

  • Send push notifications to phone or desktop
  • Update or clear previously sent notifications
  • Poll cached messages from ntfy topics
  • Look up emoji short codes for notification tags

Source and maintenance

Community listingRegistry 2.4.0Apache-2.0
Last repository push
Latest release
v2.4.0
Maintenance checked

Packages and installation

Source-provided package data. Koskamo has not executed or live-probed this package.

ntfy-mcp-server 2.4.0

npmnpx
ntfy-mcp-server package definition
{
  "version": "2.4.0",
  "transport": "stdio",
  "identifier": "ntfy-mcp-server",
  "runtimeHint": "npx",
  "registryType": "npm",
  "registryBaseUrl": "https://registry.npmjs.org",
  "environmentVariables": [
    {
      "name": "NTFY_SERVERS",
      "format": "string",
      "description": "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-server NTFY_BASE_URL / NTFY_AUTH_* shorthand."
    },
    {
      "name": "NTFY_BASE_URL",
      "format": "string",
      "default": "https://ntfy.sh",
      "description": "Single-server shorthand — base URL of the ntfy server (no trailing slash). Used when NTFY_SERVERS is unset."
    },
    {
      "name": "NTFY_DEFAULT_TOPIC",
      "format": "string",
      "description": "Topic used when a tool call omits `topic`. Treat the topic name as a secret — anyone who knows it can publish or subscribe."
    },
    {
      "name": "NTFY_AUTH_TOKEN",
      "format": "string",
      "description": "Bearer access token (`tk_…`) for the single-server shorthand. Mutually exclusive with NTFY_AUTH_USERNAME / NTFY_AUTH_PASSWORD."
    },
    {
      "name": "NTFY_AUTH_USERNAME",
      "format": "string",
      "description": "Basic-auth username for the single-server shorthand — must be set together with NTFY_AUTH_PASSWORD."
    },
    {
      "name": "NTFY_AUTH_PASSWORD",
      "format": "string",
      "description": "Basic-auth password for the single-server shorthand — must be set together with NTFY_AUTH_USERNAME."
    },
    {
      "name": "NTFY_REQUEST_TIMEOUT_MS",
      "format": "string",
      "default": "15000",
      "description": "Per-attempt HTTP timeout in milliseconds, covering the response body. Each call is also capped at 50 s across all attempts."
    },
    {
      "name": "NTFY_MAX_RETRIES",
      "format": "string",
      "default": "3",
      "description": "Max retry attempts for transient upstream failures (5xx, network, 429)."
    },
    {
      "name": "NTFY_BLOCK_PRIVATE_HOSTS",
      "format": "string",
      "default": "false",
      "description": "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."
    },
    {
      "name": "NTFY_ENABLE_EMOJI_TAGS",
      "format": "string",
      "default": "true",
      "description": "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."
    },
    {
      "name": "MCP_LOG_LEVEL",
      "format": "string",
      "default": "info",
      "description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn')."
    },
    {
      "name": "LOGS_DIR",
      "format": "string",
      "default": "./logs",
      "description": "Directory for file-based logs (Node only; ignored on Workers)."
    },
    {
      "name": "OTEL_ENABLED",
      "format": "string",
      "default": "false",
      "description": "Enable OpenTelemetry instrumentation (spans, metrics, completion logs)."
    }
  ]
}

Tools

Reported by the attributed source; not independently observed by Koskamo.

No tool definitions available.

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · repository · passed · metadata changed · updated
  • · backfill · recorded · Pre-expansion baseline; unobserved rich metadata remains unknown

Connect from your client

Each snippet configures the same source-provided package; replace placeholders before use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Cursor

Merge this local stdio configuration, replace every placeholder environment value, and restart Cursor. Koskamo has not executed this package.
Cursor configuration
{
  "mcpServers": {
    "ntfy-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "ntfy-mcp-server@2.4.0"
      ],
      "env": {
        "NTFY_SERVERS": "<YOUR_NTFY_SERVERS>",
        "NTFY_BASE_URL": "<YOUR_NTFY_BASE_URL>",
        "NTFY_DEFAULT_TOPIC": "<YOUR_NTFY_DEFAULT_TOPIC>",
        "NTFY_AUTH_TOKEN": "<YOUR_NTFY_AUTH_TOKEN>",
        "NTFY_AUTH_USERNAME": "<YOUR_NTFY_AUTH_USERNAME>",
        "NTFY_AUTH_PASSWORD": "<YOUR_NTFY_AUTH_PASSWORD>",
        "NTFY_REQUEST_TIMEOUT_MS": "<YOUR_NTFY_REQUEST_TIMEOUT_MS>",
        "NTFY_MAX_RETRIES": "<YOUR_NTFY_MAX_RETRIES>",
        "NTFY_BLOCK_PRIVATE_HOSTS": "<YOUR_NTFY_BLOCK_PRIVATE_HOSTS>",
        "NTFY_ENABLE_EMOJI_TAGS": "<YOUR_NTFY_ENABLE_EMOJI_TAGS>",
        "MCP_LOG_LEVEL": "<YOUR_MCP_LOG_LEVEL>",
        "LOGS_DIR": "<YOUR_LOGS_DIR>",
        "OTEL_ENABLED": "<YOUR_OTEL_ENABLED>"
      }
    }
  }
}

Cline

Merge this local stdio configuration, replace every placeholder environment value, and restart Cline. Koskamo has not executed this package.
Cline configuration
{
  "mcpServers": {
    "ntfy-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "ntfy-mcp-server@2.4.0"
      ],
      "env": {
        "NTFY_SERVERS": "<YOUR_NTFY_SERVERS>",
        "NTFY_BASE_URL": "<YOUR_NTFY_BASE_URL>",
        "NTFY_DEFAULT_TOPIC": "<YOUR_NTFY_DEFAULT_TOPIC>",
        "NTFY_AUTH_TOKEN": "<YOUR_NTFY_AUTH_TOKEN>",
        "NTFY_AUTH_USERNAME": "<YOUR_NTFY_AUTH_USERNAME>",
        "NTFY_AUTH_PASSWORD": "<YOUR_NTFY_AUTH_PASSWORD>",
        "NTFY_REQUEST_TIMEOUT_MS": "<YOUR_NTFY_REQUEST_TIMEOUT_MS>",
        "NTFY_MAX_RETRIES": "<YOUR_NTFY_MAX_RETRIES>",
        "NTFY_BLOCK_PRIVATE_HOSTS": "<YOUR_NTFY_BLOCK_PRIVATE_HOSTS>",
        "NTFY_ENABLE_EMOJI_TAGS": "<YOUR_NTFY_ENABLE_EMOJI_TAGS>",
        "MCP_LOG_LEVEL": "<YOUR_MCP_LOG_LEVEL>",
        "LOGS_DIR": "<YOUR_LOGS_DIR>",
        "OTEL_ENABLED": "<YOUR_OTEL_ENABLED>"
      }
    }
  }
}

VS Code

Merge this local stdio configuration, replace every placeholder environment value, and restart VS Code. Koskamo has not executed this package.
VS Code configuration
{
  "servers": {
    "ntfy-mcp-server": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "ntfy-mcp-server@2.4.0"
      ],
      "env": {
        "NTFY_SERVERS": "<YOUR_NTFY_SERVERS>",
        "NTFY_BASE_URL": "<YOUR_NTFY_BASE_URL>",
        "NTFY_DEFAULT_TOPIC": "<YOUR_NTFY_DEFAULT_TOPIC>",
        "NTFY_AUTH_TOKEN": "<YOUR_NTFY_AUTH_TOKEN>",
        "NTFY_AUTH_USERNAME": "<YOUR_NTFY_AUTH_USERNAME>",
        "NTFY_AUTH_PASSWORD": "<YOUR_NTFY_AUTH_PASSWORD>",
        "NTFY_REQUEST_TIMEOUT_MS": "<YOUR_NTFY_REQUEST_TIMEOUT_MS>",
        "NTFY_MAX_RETRIES": "<YOUR_NTFY_MAX_RETRIES>",
        "NTFY_BLOCK_PRIVATE_HOSTS": "<YOUR_NTFY_BLOCK_PRIVATE_HOSTS>",
        "NTFY_ENABLE_EMOJI_TAGS": "<YOUR_NTFY_ENABLE_EMOJI_TAGS>",
        "MCP_LOG_LEVEL": "<YOUR_MCP_LOG_LEVEL>",
        "LOGS_DIR": "<YOUR_LOGS_DIR>",
        "OTEL_ENABLED": "<YOUR_OTEL_ENABLED>"
      }
    }
  }
}

Claude Desktop

Merge this local stdio configuration, replace every placeholder environment value, and restart Claude Desktop. Koskamo has not executed this package.
Claude Desktop configuration
{
  "mcpServers": {
    "ntfy-mcp-server": {
      "command": "npx",
      "args": [
        "-y",
        "ntfy-mcp-server@2.4.0"
      ],
      "env": {
        "NTFY_SERVERS": "<YOUR_NTFY_SERVERS>",
        "NTFY_BASE_URL": "<YOUR_NTFY_BASE_URL>",
        "NTFY_DEFAULT_TOPIC": "<YOUR_NTFY_DEFAULT_TOPIC>",
        "NTFY_AUTH_TOKEN": "<YOUR_NTFY_AUTH_TOKEN>",
        "NTFY_AUTH_USERNAME": "<YOUR_NTFY_AUTH_USERNAME>",
        "NTFY_AUTH_PASSWORD": "<YOUR_NTFY_AUTH_PASSWORD>",
        "NTFY_REQUEST_TIMEOUT_MS": "<YOUR_NTFY_REQUEST_TIMEOUT_MS>",
        "NTFY_MAX_RETRIES": "<YOUR_NTFY_MAX_RETRIES>",
        "NTFY_BLOCK_PRIVATE_HOSTS": "<YOUR_NTFY_BLOCK_PRIVATE_HOSTS>",
        "NTFY_ENABLE_EMOJI_TAGS": "<YOUR_NTFY_ENABLE_EMOJI_TAGS>",
        "MCP_LOG_LEVEL": "<YOUR_MCP_LOG_LEVEL>",
        "LOGS_DIR": "<YOUR_LOGS_DIR>",
        "OTEL_ENABLED": "<YOUR_OTEL_ENABLED>"
      }
    }
  }
}

Let your agent find its tools

Find servers like ntfy-mcp-server from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.