ntfy_send_notify
Send push notifications via Ntfy with customizable messages, titles, priorities, attachments, and action buttons for targeted alerts.
Instructions
Push a notification via Ntfy
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Notification message body; set to `triggered` if empty or not passed | |
| title | No | Notification title | |
| topic | No | Target topic name or URL | |
| click | No | URL opened when notification is clicked | |
| attach | No | URL of an attachment | |
| icon | No | URL of notification icon | |
| markdown | No | Set to `true` if the message is Markdown-formatted | |
| filename | No | File name of the attachment | |
| priority | No | Message priority with 1=min, 3=default and 5=max | |
| delay | No | Timestamp or duration for delayed delivery. Example: 30min, 9am | |
| actions | No | List of action buttons. The following actions are supported: - view: Opens a website or app when the action button is tapped - broadcast: Sends an Android broadcast intent when the action button is tapped (only supported on Android) - http: Sends HTTP POST/GET/PUT request when the action button is tapped ```json [ { "action": "view", "label": "Open portal", "url": "https://home.nest.com/", "clear": true }, { "action": "http", "label": "Turn down", "url": "https://api.nest.com/", "body": "{"temperature": 65}" }, { "action": "broadcast", "label": "Take picture", "extras": { "cmd": "pic", "camera": "front" } } ] ``` |
Implementation Reference
- mcp_notify/other.py:150-187 (handler)The core handler function implementing the ntfy_send_notify tool. It prepares a JSON payload with the provided notification parameters and sends a POST request to the ntfy server (default https://ntfy.sh). Supports topic, title, message, click URL, attachment, icon, markdown, priority, delay, and actions.def ntfy_send_notify( message: str = Field(description="Notification message body; set to `triggered` if empty or not passed"), title: str = Field("", description="Notification title"), topic: str = Field("", description="Target topic name or URL"), click: str = Field("", description="URL opened when notification is clicked"), attach: str = Field("", description="URL of an attachment"), icon: str = Field("", description="URL of notification icon"), markdown: bool = Field(False, description="Set to `true` if the message is Markdown-formatted"), filename: str = Field("", description="File name of the attachment"), priority: int = Field(3, description="Message priority with 1=min, 3=default and 5=max"), delay: str = Field("", description="Timestamp or duration for delayed delivery. Example: 30min, 9am"), actions: list | None = Field(None, description=f"List of action buttons.{NTFY_ACTIONS_RULE}"), ): """ https://docs.ntfy.sh/publish/#publish-as-json """ base = os.getenv("NTFY_BASE_URL") or "https://ntfy.sh" if topic and topic.startswith("http"): base, topic = topic.rsplit("/", 1) if not topic: topic = os.getenv("NTFY_DEFAULT_TOPIC", "") data = { "topic": topic, "title": title, "message": message, "click": click, "icon": icon, "markdown": markdown or False, "priority": priority, "delay": delay, } if attach: data["attach"] = attach data["filename"] = filename if actions: data["actions"] = actions res = requests.post(f"{base}", json=data) return res.json()
- mcp_notify/other.py:151-162 (schema)Pydantic Field definitions providing input schema validation and descriptions for the tool parameters.message: str = Field(description="Notification message body; set to `triggered` if empty or not passed"), title: str = Field("", description="Notification title"), topic: str = Field("", description="Target topic name or URL"), click: str = Field("", description="URL opened when notification is clicked"), attach: str = Field("", description="URL of an attachment"), icon: str = Field("", description="URL of notification icon"), markdown: bool = Field(False, description="Set to `true` if the message is Markdown-formatted"), filename: str = Field("", description="File name of the attachment"), priority: int = Field(3, description="Message priority with 1=min, 3=default and 5=max"), delay: str = Field("", description="Timestamp or duration for delayed delivery. Example: 30min, 9am"), actions: list | None = Field(None, description=f"List of action buttons.{NTFY_ACTIONS_RULE}"), ):
- mcp_notify/other.py:146-149 (registration)The @mcp.tool decorator registers the ntfy_send_notify tool with FastMCP, providing title and description.@mcp.tool( title="Ntfy Push Notification", description="Push a notification via Ntfy", )
- mcp_notify/__init__.py:18-23 (registration)In the package init, other.add_tools(mcp) is called (line 21), which defines and registers the tool via decorators in other.py.mcp = FastMCP(name="mcp-notify", version="0.1.7") wework.add_tools(mcp) tgbot.add_tools(mcp) other.add_tools(mcp) hass.add_tools(mcp) util.add_tools(mcp)