Skip to content

mcpx conformance: rate limits for sampling and elicitation requests (split of #1957) #2192

Closed

Description

@dezren39

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.

Activity

  1. added
    kind/bugSomething isn't working (prefixed form of the classic bug label)
    priority/normalOrdinary priority (the default)
    queue/queuedHas a queued task in the Supabase agent queue
    on Oct 29, 2026
  2. developing-today commented on Oct 29, 2026

    @developing-today
    Contributor
  3. added
    app/mcpxPackage/app: mcpx (pkgs/ or apps/ in this repo)
    on Oct 29, 2026
  4. dezren39 commented on Oct 29, 2026

    @dezren39
    MemberAuthor

    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.

  5. added
    work/assignedQueue worker lifecycle state
    queue/claimedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Oct 30, 2026
  6. dezren39 commented on Oct 30, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  7. 29 remaining items

  8. added
    status/parkedDeliberately paused with a recorded resume condition
    on Oct 30, 2026
  9. dezren39 commented on Oct 30, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up, re-parked (budget)

    • 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.
  10. added
    queue/claimedQueue worker lifecycle state
    and removed
    status/parkedDeliberately paused with a recorded resume condition
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    on Oct 30, 2026
  11. dezren39 commented on Oct 30, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  12. added a commit that references this issue on Oct 30, 2026
  13. dezren39 commented on Oct 30, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done

  14. dezren39 commented on Nov 2, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done (already done on revalidation)

  15. dezren39 commented on Nov 2, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · correction to the note above

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/mcpxPackage/app: mcpx (pkgs/ or apps/ in this repo)kind/bugSomething isn't working (prefixed form of the classic bug label)priority/normalOrdinary priority (the default)source/design-architectFiled by the repo design architect job

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions