Skip to content

feat(mcpserver): progress restarts a tool call's timeout, up to spec.progress.maxDuration - #1487

Merged
QuentinBisson merged 4 commits into
mainfrom
feat/progress-extends-call-budget
Oct 13, 2026
Merged

QuentinBisson merged 4 commits into
mainfrom
feat/progress-extends-call-budget

Conversation

@QuentinBisson

@QuentinBisson QuentinBisson commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

What does this PR do?

On a tool call whose caller sent a progressToken, each progress notification from the downstream server restarts the server's spec.timeout, up to a new per-server bound, spec.progress.maxDuration (seconds, from timeout to 3600, default 3600). Every other operation (initialize, list, ping, a call without a token) keeps spec.timeout as a plain deadline.

What is the effect of this change to users?

A long-running tool that reports progress (marge's sweep, giantswarm/marge#242) is no longer cut at spec.timeout while it is still working, with no configuration. A server that goes silent is still cut one timeout after its last notification. A server owner can lower the bound, or set it equal to timeout to turn the extension off.

How does it look like?

A call cut at the bound fails with no answer within the server's progress.maxDuration of 1h0m0s: context deadline exceeded; the idle cut keeps no answer within the server's timeout of …. A progress.maxDuration below timeout or above 3600 is rejected by the CRD (CEL) and by core_mcpserver_create/update/validate.

Any background context you can provide?

giantswarm/roadmap#4394: the Bot PRs page's sweeps outlast marge's 120 s timeout on gazelle. MCP Tasks would be the right primitive, but the Tasks extension is not in mcp-go yet (mark3labs/mcp-go#987), so progress is the stopgap. The MCP spec lets an implementation reset the timeout on progress and says it SHOULD keep a maximum regardless; it is per server because servers that report progress need different bounds. The progress block is where further progress settings go, and what gets deprecated once Tasks land.

What is needed from the reviewers?

Whether a one-hour default is right for every server.

Testing

  • New functionality is covered by unit/integration tests.
  • Existing tests have been updated to reflect changes.

Do the docs need to be updated?

CRD, configuration and MCP tools references list the new field.

Should this change be mentioned in the release notes?

  • CHANGELOG.md has been updated (if it exists)

A tool call whose caller sent a progressToken now runs under an idle
budget: every downstream progress notification restarts spec.timeout,
and MaxProgressCallDuration (1h) bounds the call as a whole. Calls
without a token keep spec.timeout as their whole budget.
@circleci-architect

circleci-architect Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

Published Helm chart muster-crds

5.39.7-r9d8ab99dt20261013100821h0a42648
Chart muster-crds
Version 5.39.7-r9d8ab99dt20261013100821h0a42648
OCI reference oci://gsoci.azurecr.io/charts/giantswarm/muster-crds:5.39.7-r9d8ab99dt20261013100821h0a42648
Digest sha256:62fcd29dc1874f2ca953984fd4c428238dd2e165a6a38b067067579ab278420f
Registry public — gsoci.azurecr.io
Git catalog giantswarm-test-catalog (index)
Pull this chart
helm pull oci://gsoci.azurecr.io/charts/giantswarm/muster-crds --version 5.39.7-r9d8ab99dt20261013100821h0a42648

Posted by architect-orb · build 35340 · commit 0a42648 · updated in place on every push

@circleci-architect

circleci-architect Bot commented Oct 13, 2026 •

Copy link
Copy Markdown

Published Helm chart muster

5.39.7-r9d8ab99dt20261013100821h0a42648
Chart muster
Version 5.39.7-r9d8ab99dt20261013100821h0a42648
OCI reference oci://gsoci.azurecr.io/charts/giantswarm/muster:5.39.7-r9d8ab99dt20261013100821h0a42648
Digest sha256:278d8d022e24d2a7e34eb5902ebc11b88fd8717102051073b98f49719dffd100
Registry public — gsoci.azurecr.io
Git catalog giantswarm-test-catalog (index)
Pull this chart
helm pull oci://gsoci.azurecr.io/charts/giantswarm/muster --version 5.39.7-r9d8ab99dt20261013100821h0a42648

Posted by architect-orb · build 35341 · commit 0a42648 · updated in place on every push

@QuentinBisson
QuentinBisson marked this pull request as ready for review October 13, 2026 09:52
@QuentinBisson
QuentinBisson requested a review from a team as a code owner October 13, 2026 09:52
…ration

Progress extends a tool call only on a server that sets maxCallDuration,
and only the tool call: every other operation keeps a plain spec.timeout
deadline. Replaces the global one-hour cap.
@QuentinBisson QuentinBisson changed the title feat(mcpserver): progress on a tool call restarts the server's timeout feat(mcpserver): progress restarts a tool call's timeout, up to spec.maxCallDuration Oct 13, 2026
…default one hour

The cap now lives in a progress block and defaults to 3600 seconds, so
every server gets progress keepalive without configuration and each can
tune or disable it (a value equal to timeout extends nothing).
@QuentinBisson QuentinBisson changed the title feat(mcpserver): progress restarts a tool call's timeout, up to spec.maxCallDuration feat(mcpserver): progress restarts a tool call's timeout, up to spec.progress.maxDuration Oct 13, 2026
@QuentinBisson
QuentinBisson merged commit d674d46 into main Oct 13, 2026
15 of 18 checks passed
@QuentinBisson
QuentinBisson deleted the feat/progress-extends-call-budget branch October 13, 2026 10:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant