mcp-ntfy
Send and poll push notifications via ntfy.sh, with support for custom topics, priorities, tags, actions, scheduling, message filtering, and server health checks.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-ntfySend a push notification saying 'Hello' to my topic"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-ntfy
MCP server for ntfy push notifications. Send and poll notifications from any MCP-compatible client.
Installation
npx mcp-ntfyRelated MCP server: ntfy-mcp
Configuration
Claude Desktop
Add to your claude_desktop_config.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:
{
"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 |
| No |
| ntfy server base URL |
| No | — | Bearer token for authentication |
| No | — | Default topic (used when tool calls omit topic) |
Tools
publish
Send a push notification to an ntfy topic.
Parameter | Type | Required | Description |
| string | No* | Topic name (*required if |
| string | Yes | Notification body |
| string | No | Notification title |
| number | No | 1=min, 2=low, 3=default, 4=high, 5=urgent |
| string[] | No | Emoji shortcodes, e.g. |
| string | No | URL to open on tap |
| string | No | File URL to attach |
| string | No | Attachment filename |
| string | No | Notification icon URL |
| string | No | Delay: |
| boolean | No | Enable Markdown formatting |
| Action[] | No | Up to 3 action buttons |
poll
Poll for cached messages from an ntfy topic.
Parameter | Type | Required | Description |
| string | No* | Topic to poll (*required if |
| string | No | Duration ( |
| boolean | No | Include scheduled messages |
| string | No | Filter by message ID |
| string | No | Filter by message text |
| string | No | Filter by title |
| string | No | Filter by priority (comma-separated) |
| string | No | Filter by tags (comma-separated, AND logic) |
server_health
Check ntfy server health status and message statistics. No parameters.
License
MIT
Available Tools
3 toolspollPoll MessagesB
Poll for cached messages from an ntfy topic.
| Name | Required | Description | Default |
|---|---|---|---|
| id | No | Filter by message ID | |
| tags | No | Filter by tags (comma-separated, AND logic, e.g. "warning,skull") | |
| since | No | Filter: duration ("10m"), Unix timestamp, message ID, "all", or "latest" | |
| title | No | Filter by title | |
| topic | No | Topic to use. Required (no default NTFY_TOPIC configured). | |
| server | No | ntfy server URL. Defaults to "https://ntfy.sh" if omitted. | |
| message | No | Filter by message text | |
| priority | No | Filter by priority (comma-separated, e.g. "4,5" for high+urgent) | |
| scheduled | No | Include scheduled/delayed messages |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full behavioral burden. It communicates that the tool reads cached messages, but it does not disclose return format, blocking behavior, timeout semantics, side effects, or how 'cached messages' are selected or delivered. This is minimal behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler, repetition, or irrelevant detail. 'Poll', 'cached messages', and 'ntfy topic' all add meaningful information without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema is rich and fully covers parameters, but there is no output schema and no annotations, and the description omits context about the returned messages or behavioral traits of polling. It is adequate for basic invocation, but not fully complete for a 9-parameter tool with no additional structured context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all nine parameters are already documented in the schema, including filters, the server default, and the effectively required topic. The description adds no parameter-level meaning, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Poll for cached messages from an ntfy topic.' It clearly identifies the tool as a retrieval operation and is distinct in intent from the publish sibling. However, it does not explicitly differentiate itself from server_health or name an alternative, so it falls just short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus publish or server_health, nor are any exclusions or prerequisites given. The verb 'poll' implies retrieval, but the agent is left to infer the appropriate use case without direct support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
publishPublish NotificationA
Send a push notification to an ntfy topic.
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | URL of notification icon (PNG/JPEG) | |
| tags | No | Emoji tags (shortcodes without colons), e.g. ["warning","rotating_light"] | |
| click | No | URL to open when notification is clicked | |
| delay | No | Delay delivery: duration ("30m", "2h"), timestamp, or natural language ("tomorrow 9am") | |
| title | No | Notification title | |
| topic | No | Topic to use. Required (no default NTFY_TOPIC configured). | |
| attach | No | URL of file to attach to the notification | |
| server | No | ntfy server URL. Defaults to "https://ntfy.sh" if omitted. | |
| actions | No | Up to 3 action buttons (view, http, broadcast) | |
| message | Yes | Notification message body | |
| filename | No | Filename for the attachment | |
| markdown | No | Enable Markdown formatting in the message body | |
| priority | No | Priority: 1=min, 2=low, 3=default, 4=high, 5=urgent |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the action without mentioning any side effects, authentication requirements, rate limits, idempotency, or failure behavior. For a tool that sends a notification, this is minimal but not misleading; still, critical behavioral context is absent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that states the core purpose without any filler. It is front-loaded with the key action and resource, making it easy to scan. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 13 parameters, but the schema documents all of them thoroughly. The description provides the basic operation context, and the schema covers parameter semantics. However, there is no mention of typical usage patterns, error handling, or the requirement that 'topic' is effectively required (noted in the schema but not in the description). For a simple send operation, this is adequate but not fully complete given the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% parameter descriptions, so the description does not need to add parameter details. The description adds no extra meaning beyond the schema, which is acceptable given the comprehensive schema coverage. The baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action: 'Send a push notification to an ntfy topic.' It uses a specific verb (send), a resource (push notification), and a target (ntfy topic), which distinguishes it from sibling tools 'poll' and 'server_health' without needing further context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (when a notification needs to be sent) but does not explicitly state when to use this tool versus alternatives. There are no exclusionary notes or references to sibling tools. The purpose is self-evident, but explicit guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
server_healthServer HealthB
Check ntfy server health status and message statistics.
| Name | Required | Description | Default |
|---|---|---|---|
| server | No | ntfy server URL. Defaults to "https://ntfy.sh" if omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the action and does not mention side effects, network behavior, error handling, or authentication requirements. For a read-only health check, this may be acceptable, but the description provides no additional context beyond the core function.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that immediately states the tool's purpose. It is front-loaded with the key action and resource, with no unnecessary words or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema, no nested objects), the description is reasonably complete. However, it leaves the exact meaning of 'message statistics' unspecified, and does not clarify whether the health check returns a boolean, a structured report, or something else. This is a minor gap for a health-check tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the single optional 'server' parameter with 100% coverage, so the description does not need to repeat it. However, the description adds no additional meaning or context about the parameter, such as its impact on the health check or examples of valid values, keeping it at the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool checks server health status and message statistics, using a specific verb and resource. It is easily distinguished from sibling tools publish and poll, which have different purposes, though it doesn't explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus the alternatives. It is implied that this is for health checks, but there are no explicit conditions, exclusions, or references to other tools, leaving the agent to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v1.1.0- First observed
poll - First observed
publish - First observed
server_health
TDQS
Scored across 3 tools
Each tool targets a distinct operation: publishing notifications, polling cached messages, and checking server health. There is no overlap or ambiguity between them.
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.
Three tools is well-scoped for an ntfy integration: send, receive, and health check. Each tool earns its place without unnecessary bulk.
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
Related MCP Connectors
MCP server for OnceAsk, the AI-native current-address layer for people and agents.
MCP server for Ably — channel history, presence, occupancy, stats, publish, and app management.
MCP server for MailTempo's public free temporary email inboxes.
MCP server wrapping the Tesla Fleet API and TeslaMate API
Related MCP Servers
- AlicenseBqualityDmaintenanceMCP server for sending Gotify push notifications to your devices.1MIT
- AlicenseCqualityDmaintenanceMCP server for sending notifications to ntfy.sh or self-hosted ntfy instances.212 npmMIT
- AlicenseBqualityDmaintenanceA lightweight MCP server for sending push notifications via ntfy.sh, supporting customizable titles, priorities, tags, and action buttons.16 npm7MIT
- AlicenseNot gradedqualityAmaintenanceMCP server and CLI for Gotify that lets agents send push notifications, check server health, list messages, and manage Gotify apps and clients over stdio or streamable HTTP, with authentication support.2AGPL 3.0