Skip to main content
Glama
README.md
# mcp-ntfy

MCP server for [ntfy](https://ntfy.sh) push notifications. Send and poll notifications from any MCP-compatible client.

## Installation

```bash
npx mcp-ntfy
```

## Configuration

### Claude Desktop

Add to your `claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "ntfy": {
      "command": "npx",
      "args": ["-y", "mcp-ntfy"],
      "env": {
        "NTFY_URL": "https://ntfy.sh",
        "NTFY_TOKEN": "tk_...",
        "NTFY_TOPIC": "my-notifications"
      }
    }
  }
}
```

### Claude Code

Add to your Claude Code MCP settings:

```json
{
  "mcpServers": {
    "ntfy": {
      "command": "npx",
      "args": ["-y", "mcp-ntfy"],
      "env": {
        "NTFY_URL": "https://ntfy.sh",
        "NTFY_TOKEN": "tk_...",
        "NTFY_TOPIC": "my-notifications"
      }
    }
  }
}
```

### Environment Variables

| Variable | Required | Default | Description |
|----------|----------|---------|-------------|
| `NTFY_URL` | No | `https://ntfy.sh` | ntfy server base URL |
| `NTFY_TOKEN` | No | — | Bearer token for authentication |
| `NTFY_TOPIC` | No | — | Default topic (used when tool calls omit topic) |

## Tools

### `publish`

Send a push notification to an ntfy topic.

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `topic` | string | No* | Topic name (*required if `NTFY_TOPIC` not set) |
| `message` | string | Yes | Notification body |
| `title` | string | No | Notification title |
| `priority` | number | No | 1=min, 2=low, 3=default, 4=high, 5=urgent |
| `tags` | string[] | No | Emoji shortcodes, e.g. `["warning", "skull"]` |
| `click` | string | No | URL to open on tap |
| `attach` | string | No | File URL to attach |
| `filename` | string | No | Attachment filename |
| `icon` | string | No | Notification icon URL |
| `delay` | string | No | Delay: `"30m"`, `"2h"`, `"tomorrow 9am"` |
| `markdown` | boolean | No | Enable Markdown formatting |
| `actions` | Action[] | No | Up to 3 action buttons |

### `poll`

Poll for cached messages from an ntfy topic.

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `topic` | string | No* | Topic to poll (*required if `NTFY_TOPIC` not set) |
| `since` | string | No | Duration (`"10m"`), timestamp, ID, `"all"`, or `"latest"` |
| `scheduled` | boolean | No | Include scheduled messages |
| `id` | string | No | Filter by message ID |
| `message` | string | No | Filter by message text |
| `title` | string | No | Filter by title |
| `priority` | string | No | Filter by priority (comma-separated) |
| `tags` | string | No | Filter by tags (comma-separated, AND logic) |

### `server_health`

Check ntfy server health status and message statistics. No parameters.

## License

MIT

TDQS

A3.6/5.0

Scored across 3 tools

Disambiguation5/5

Each tool targets a distinct operation: publishing notifications, polling cached messages, and checking server health. There is no overlap or ambiguity between them.

Naming Consistency4/5

publish and poll follow a clear verb pattern, while server_health is a noun phrase rather than a verb-based action. The naming is mostly consistent and intuitive, with only a minor deviation.

Tool Count5/5

Three tools is well-scoped for an ntfy integration: send, receive, and health check. Each tool earns its place without unnecessary bulk.

Completeness4/5

The core notification lifecycle is covered: publishing, retrieving messages, and verifying server status. Real-time subscription is not included, but polling cached messages covers the main retrieval use case adequately.

Maintenance

ActivityInactive
ResponsivenessNo issues