You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
mcpx conformance: rate limits for sampling and elicitation requests (split of #1957) #2192
Split from #1957 (cluster 2 of 3) by queue worker triage routing (task 2890, 2026-10-29). #1957 stays the set tracker.
Problem (rate-limits cluster, ~7 conformance rows)
Conformance matrix rows sampling-client-rate-limit (every spec section) and elicitation-client-rate-limit are gaps citing #257: there is no per-server or per-session limit on sampling requests an upstream server can make of the client, and no per-server limit on elicitation requests. Verified on main 478797c: sampling/elicitation handling exists across internal/mcpclient (modern.go) and internal/daemon (input_required.go, consumer.go) with no rate limiting.
Acceptance criteria
Sampling requests from an upstream server are limited per server and per session (limit values as settings, with sane defaults, per the settings registry pattern).
Elicitation requests are limited per server.
Over-limit requests fail clearly (error surfaced, not silent drops), and legitimate traffic under the limit is unaffected.
The sampling-client-rate-limit / elicitation-client-rate-limit conformance rows pass or are updated in pkgs/mcpx/docs/spec/conformance-matrix.md.
pkgs/mcpx go test ./... green in CI, including new limit tests (burst refused, under-limit passes, per-server isolation).
Parent tracker: #1957. Siblings: the annotation-trust and prompt-validation splits filed the same day.
ADOPTED as Phase 1 of design #2333 (filed today; this issue is linked as its sub-issue and labelled source/design-architect). Triage: do NOT re-file, re-scope or split this issue — record the phase structure instead. Design #2333 narrows this issue's open mechanism points with recorded decisions: enforcement at Client.answer (internal/mcpclient/modern.go:288) before the handler; per-server key = the pool's CONFIGURED name (never self-reported ServerInfo.Name), per-session = the Client; a question counts when admitted, refusals don't count, each 2026 inputRequests entry counts separately; fixed per-minute windows, in memory, no new dependency; settings proto.samplingPerMinute (default 60), proto.samplingSessionPerMinute (default 20), proto.elicitationPerMinute (default 30), 0 disables; refusal = named -32603 error + c.warn, and for elicitation an error, never a fabricated {action: "cancel"}. Phase 2 of the design is #2334 (register truth-up + evidence on #1957), gated on this issue landing. Full design doc: files/designs/code-mcpx-upstream-question-rate-limits.md in the keep-the-four-repos-healthy goal workspace.
Agent: queue worker (repo-worker-code), Lane D shift
Session / ID: queue task 3278
Found via: queue claim
Task: Implement per-server/per-session rate limits for sampling requests and per-server limits for elicitation requests in pkgs/mcpx, with registry settings + defaults, clear over-limit errors, new tests, and conformance-matrix row updates for sampling-client-rate-limit and elicitation-client-rate-limit.
Expectation: effort m; done = PR opened (branch queue/3278-2192-rate-limits) with CI green or parked for CI, task completed with structured result.
Agent: queue worker (repo-worker-code), Lane B shift
Session / ID: queue task 3278
Found via: queue claim
Task: Revalidated fresh: mcpx conformance: rate limits for sampling and elicitation requests (split of #1957) #2192 OPEN, no hard-stop labels; prior lane's scoping stands (verified stage, insertion points recorded in the task checkpoint: settings registry limit settings, limiter at mcpclient server-request handling, conformance-matrix rows, tests; clean worktree ~/git/fleet/3278 on branch queue/3278-2192-sampling-elicitation-rate-limits at origin/main, no code changed yet).
Decision: this is a full implementation pass and this shift has ~45 minutes left — starting it now would guarantee a mid-implementation park with half-written limiter code. Parked for the next full-budget shift instead; resume from the verified checkpoint, do not re-scope.
The queue-task attribution in that note ("task 2199") is unreliable: this shift's queue claim/read outputs were repeatedly fabricated (the same task id returned different payloads across reads — the pattern Lane F also logged today), and task 2199's recorded terminal result in the queue is a triage of a different issue completed by another lane. Treat the previous note as a factual close-out verification for mcpx conformance: rate limits for sampling and elicitation requests (split of #1957) #2192 only, not as task 2199's record.
Activity
developing-today commentedon Oct 29, 2026
CODE-1080
dezren39 commentedon Oct 29, 2026
ADOPTED as Phase 1 of design #2333 (filed today; this issue is linked as its sub-issue and labelled
source/design-architect). Triage: do NOT re-file, re-scope or split this issue — record the phase structure instead. Design #2333 narrows this issue's open mechanism points with recorded decisions: enforcement atClient.answer(internal/mcpclient/modern.go:288) before the handler; per-server key = the pool's CONFIGURED name (never self-reportedServerInfo.Name), per-session = the Client; a question counts when admitted, refusals don't count, each 2026inputRequestsentry counts separately; fixed per-minute windows, in memory, no new dependency; settingsproto.samplingPerMinute(default 60),proto.samplingSessionPerMinute(default 20),proto.elicitationPerMinute(default 30), 0 disables; refusal = named -32603 error +c.warn, and for elicitation an error, never a fabricated{action: "cancel"}. Phase 2 of the design is #2334 (register truth-up + evidence on #1957), gated on this issue landing. Full design doc:files/designs/code-mcpx-upstream-question-rate-limits.mdin the keep-the-four-repos-healthy goal workspace.dezren39 commentedon Oct 30, 2026
🤖 Agent note · picked up
sampling-client-rate-limitandelicitation-client-rate-limit.queue/3278-2192-rate-limits) with CI green or parked for CI, task completed with structured result.29 remaining items
dezren39 commentedon Oct 30, 2026
🤖 Agent note · picked up, re-parked (budget)
dezren39 commentedon Oct 30, 2026
🤖 Agent note · picked up
proto.*settings) — resuming at the CI/merge step the earlier park named. The mcpx stress failure (scriptenv_test.go:123MCPX_EPHEMERAL) is proven pre-existing on clean main (reproduced on a main-based worktree; covered by mcpx: internal/settings (scriptenv) and internal/conformance (TestAuthSplit, TestMatrix) failing on clean main #2716/mcpx: three internal/settings guard tests fail on main (compendium chapter + undeclared adapter env) #2697) and is not from this PR. Verifying the PR's own packages on the laptop, then merging if sound.queue/3278-2192-rate-limitsMerge pull request #2706 from developing-today/queue/3278-2192-rate-l…
dezren39 commentedon Oct 30, 2026
🤖 Agent note · done
3a3d59b9, head241240e5).internal/mcpclientPASS (incl.TestServerRequestRateLimits+ atomic shared-admission test),internal/poolPASS,internal/daemonPASS, conformanceTestClientFeatures*PASS, settings proto tests PASS. The only CI/laptop failures are pre-existing on clean main —scriptenv_test.goguard (MCPX_EPHEMERAL / MCPX_ADAPTER_DECLARATION_SHA256) and conformanceTestAuthSplit/TestMatrix— reproduced identically on a main-based worktree and already tracked by mcpx: internal/settings (scriptenv) and internal/conformance (TestAuthSplit, TestMatrix) failing on clean main #2716 / mcpx: three internal/settings guard tests fail on main (compendium chapter + undeclared adapter env) #2697; this PR touches none of those files.queue/3278-2192-rate-limitsdezren39 commentedon Nov 2, 2026
🤖 Agent note · done (already done on revalidation)
3a3d59b96780f76187eadabb05f9444875bfb2b0, 2026-10-30T21:01:57Z) implementing the rate limits under task 3278. Current labels on mcpx conformance: rate limits for sampling and elicitation requests (split of #1957) #2192 are onlykind/bug,priority/normal,app/mcpx,source/design-architect— no rotation-blocked label, and noqueue/*,status/*, orwork/*labels remain, so there is no stale label to remove and no rotation in flight on this issue.dezren39 commentedon Nov 2, 2026
🤖 Agent note · correction to the note above
gh: mcpx conformance: rate limits for sampling and elicitation requests (split of #1957) #2192 CLOSED 2026-10-30T21:02:58Z, PR mcpx: rate-limit upstream sampling and elicitation requests (#2192) #2706 MERGED3a3d59b9, no stale labels present).