--- title: useNotify description: "Surface a status/notification (toast, badge, or log) to the host from your view." --- The `useNotify` hook returns a function that surfaces a notification to the host — for example, to confirm an action succeeded. It is one of the four mcp-ui view→host interaction types (`tool`, `prompt`, `notify`, `intent`). **Best-effort delivery.** How — and whether — a notification is shown is host-driven. enpilink delivers it over the most appropriate channel for each runtime (see [Runtime support](#runtime-support)); a host that supports neither path simply no-ops. The call never throws. ## Basic usage ```tsx import { useNotify } from "enpilink/web"; function SaveButton() { const notify = useNotify(); return ( ); } ``` ## Returns ```tsx notify: (notification: Notification) => Promise ``` ### Parameters - `notification.message: string` — **Required.** The notification text. - `notification.level?: "info" | "success" | "warning" | "error"` — Severity. Maps to the host's notification styling. Defaults to `info`. - `notification.title?: string` — Optional short title. - `notification.data?: unknown` — Optional structured payload for the host. ## Runtime support | Runtime | How it's delivered | Notes | |---|---|---| | **MCP Apps** | Real MCP protocol: `notifications/message` (`app.sendLog`, `logger: "enpilink"`). | `level: "success"` has no MCP logging equivalent and is **coerced to `info`** — the original level is preserved in the structured payload. Hosts may render a toast or just record it for debugging. | | **ChatGPT Apps SDK** | **enpilink extension** — not part of the Apps SDK. Uses a `window.openai.notify` host method if present, else falls back to `window.parent.postMessage({ type: "notify", payload }, "*")`. | Real-host rendering is unverified; degrades to a no-op. | | **Console / local playground** | Shown as a `notify [level]` entry in the Logs drawer. | Always observable locally. | On the MCP Apps runtime `notify` uses the **real** `notifications/message` protocol, so a compliant host receives it as a standard log. On the ChatGPT Apps SDK it is an **enpilink extension** and best-effort. Do not rely on a specific visual treatment across hosts.