Skip to main content
Notifications are one-way MCP messages. In the stateless 2026 protocol, a server can send notifications related to an active request or publish the standard list and resource changes that clients requested through subscriptions/listen. There is no session-targeted or arbitrary post-response push channel. Keep custom status notifications inside the tool, resource, or prompt callback that owns the active response stream.

Choose the notification path

Notify the current client

Use ctx.sendNotification(method, params?) inside a callback. It preserves the v1 method-and-params signature while using the official v2 request notification channel. Use an application namespace for custom methods so clients can route them without colliding with standard MCP notifications.
The notification is delivered on the originating request’s response stream before its final result. Await it before returning from the callback. It cannot be saved and reused to notify that client after the request finishes. The receiving client registers a handler for the same custom method:

Publish list and resource changes

Cross-request invalidations use the server’s subscription-backed helpers. Only clients with an active subscriptions/listen request for the corresponding notification type receive them.
These helpers are for registry and resource changes, not arbitrary custom messages.

Report progress

Use ctx.reportProgress when the current request has stages the client should see. It returns false without sending anything when the caller did not supply a progress token.

Send an MCP log message

ctx.sendLog(level, data, logger?) sends the standard notifications/message notification on the active request. Modern clients must opt in with a request log level; otherwise the SDK suppresses the message.

Next steps

Tool context API reference

Look up ctx.sendNotification, ctx.reportProgress, and ctx.sendLog.

Resource subscriptions

Notify clients that subscribed resource content changed.

Client notifications

Handle standard and custom notifications in a TypeScript MCP client.