Skip to content

mcpx: the per-server auth: block is parsed and never applied #1926

Closed

Description

@dezren39

Relocated from dezren39/darwin-nix#205 on 2026-10-28 (placement audit): mcpx's single source lives in developing-today/code (pkgs/mcpx); re-home tracked at #309. Original body below; issue references inside it are historical (dezren39/nix numbering).

Parent: #177

Summary

docs/protocol.md §6 says OAuth for remote servers is "declared and not performed". The gap is wider: the whole per-server auth block (bearer, basic, header, query, env) is never applied. mcpauth.Auth.Resolve has no caller, so a remote server configured with auth: is reached without credentials, and only plain headers: works. Describe, documented as used by mcpx config and mcpx doctor, has no caller either.

Found while writing the comparison register (pkgs/mcpx/docs/compare/) and checked against the code at 05c78b2. Each row below links its register entry, which carries the value, effort, risk, the specification text and every source.

Register rows

row difference mcpx @ 05c78b2 effort
AUTH-22 Per-server auth: block parsed and never applied ✗ broken — Auth.Resolve has no caller S

Evidence

  • internal/mcpauth/mcpauth.go:93 (Resolve), :186-189 (Describe); the only reference to the package is the type at internal/config/config.go:141.
  • Headers are applied at internal/pool/pool.go:377-380; auth is not.

What to do

Apply Resolve() where headers are applied, fail with a clear message when a required credential is missing, and add the guard test #177 describes (every config field declared on a server has an observable effect).

Ease · Impact · Related

Ease S · Impact med · Related: #177, #172 (declared and unread)

Acceptance criteria

  • The per-server auth: block is applied where headers: are applied: mcpauth.Auth.Resolve has a caller on the remote-server connect path, and bearer/basic/header/query/env credentials from the block reach the upstream request.
  • A required credential that cannot be resolved fails with a clear message naming the server and the missing credential — never a silent unauthenticated connection.
  • Describe is wired to its documented callers (mcpx config / mcpx doctor) or the documentation is corrected.
  • The feat(nix): Android SDK + JDK 21 in the system and dev shells, and the OpenChamber release signing key #177 guard test exists: every config field declared on a server has an observable effect, and it fails if auth: is dropped again.
  • Existing headers:-only servers behave exactly as before; tests pass in CI.

Activity

  1. developing-today commented on Oct 28, 2026

    @developing-today
    Contributor
  2. dezren39 commented on Oct 28, 2026

    @dezren39
    MemberAuthor

    History carried over from dezren39/darwin-nix#205 (verbatim, oldest first):


    @dezren39 · 2026-10-28T05:40:26Z

    Intake review — fleet monitor

    Liveness: Verified still live at intake: the issue is open and no merged PR closes it. Evidence caveat (same as the rest of this register batch): the filer's evidence was verified against 05c78b2 (2026-09-30) — re-verify against current main before fixing; if a row has since been fixed, say so on the issue and narrow the scope instead of redoing it.

    Related: Parent tracker named in the issue body; sibling register-batch issues in dezren39/nix (the #209–#220 batch was enriched in the previous monitor run). mcpx also lives in developing-today/code — check for a code-side twin before assuming a nix-only fix.

    Notes / risks: Single register row (AUTH-22) with a precise call-site fix named in the issue (internal/pool/pool.go where headers are applied). Fail-closed on a missing credential is the behaviour to preserve — do not fall back to an unauthenticated connection.

    Suggested approach: Re-verify the cited code paths on current main, land failing tests for the acceptance criteria first, then the smallest fix that satisfies them.

    🤖 Agent note · state: filed

    • Agent: fleet monitor
    • Session / ID: repo-fleet-monitor run 2026-10-28 00:20 CDT
    • Found via: monitor reconciliation
    • Task: Intake enrichment (§5 pass): acceptance criteria appended, labels normalized, this review posted.
    • Expectation: effort/s as labelled; done = the acceptance criteria on the issue are met.
  3. added
    bugSomething isn't working
    kind/bugSomething isn't working (prefixed form of the classic bug label)
    source/humanFiled directly by a human
    priority/normalOrdinary priority (the default)
    effort/sSmall: expected under 2 hours of work
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    app/mcpxPackage/app: mcpx (pkgs/ or apps/ in this repo)
    queue/queuedHas a queued task in the Supabase agent queue
    on Oct 28, 2026
  4. added
    work/assignedQueue worker lifecycle state
    and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Oct 29, 2026
  5. 38 remaining items

  6. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    and removed
    queue/claimedQueue worker lifecycle state
    on Oct 30, 2026
  7. dezren39 commented on Oct 30, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · picked up

  8. 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
  9. dezren39 commented on Oct 30, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · done

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)bugSomething isn't workingeffort/sSmall: expected under 2 hours of workkind/bugSomething isn't working (prefixed form of the classic bug label)meta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)source/humanFiled directly by a human

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions