Why architecture matters here

Progress fails when servers spam updates (too many), forget tokens (no correlation), or ignore cancellation. Architecture matters because user experience + backpressure combine.

Advertisement

The architecture: every piece explained

The top strip is the notification path. Long operation server-side. Progress token from client _meta. notifications/progress. Client UI shows progress.

The middle row is control. Cancellation client requests. notifications/cancelled ack. Message frequency throttled. Metadata — progress + total + message.

The lower rows are ops. Timeouts. Observability. Ops — UX + backpressure + audit.

MCP progress — long ops + progress tokens + cancellation + UIshow the user something's happeningLong operationserver-side taskProgress tokenfrom client _metanotifications/progressmessage with totalClient UIprogress bar / statusCancellationclient requestsnotifications/cancelledserver acknowledgesMessage frequencythrottle updatesMetadataprogress + total + messageTimeoutsdeclare max durationObservabilityduration + cancel rateOps — user experience + backpressure + auditabortconfirmthrottleexplainboundwatchwatchoperateoperate
MCP progress notifications and cancellation flow.
Advertisement

End-to-end flow

End-to-end: client requests a large search. Server begins; every ~1 sec sends progress with current/total. UI shows bar. User cancels; server acks + stops. Total duration logged.