A client wants progress updates while a slow export tool runs. What must the client do, and what can it expect from the server?
Select an answer to reveal the explanation.
Short Explanation
Progress is opt-in per request: you hand the server a progressToken and it may keep you posted. The numbers only go up, and the total is optional. Don't look for it on a subscription stream.
Full Explanation
To receive progress for a request, the client includes a progressToken in that request's _meta. The token must be a string or integer and unique across active requests. The server MAY then send notifications/progress messages containing the token, a progress value, an optional total and an optional human-readable message. The progress value MUST increase with each notification even when the total is unknown, values may be floating point, and notifications must stop after completion. Servers may also choose not to send any progress at all, so the token is a request rather than a guarantee. A progress filter on subscriptions/listen does not exist; the filter covers list changes and resource updates, and progress is request-scoped, flowing only with the request it relates to. The logLevel field controls which log messages a server may emit for a request through notifications/message; it does not mandate progress, and nothing in the specification fixes a reporting interval. The Tasks extension provides durable handles for long-running work with polling, but it is optional, and core progress notifications work without it. Exam caveat: on Streamable HTTP, progress arrives on the request's own SSE response stream before the final response, so the server must answer with text/event-stream to stream it. Operational check: send the export with a progressToken and confirm increasing progress values that reference that token.