Skip to content

MCP: Test OAuth sign-in with supported clients #2633

Open

Description

@erichare

Prove that a supported client can start without credentials, discover the authorization service, sign in, receive consent, and make an authorized MCP call. Test recovery from denial, expired access, and permission changes. This is required for the launch in #2408.

Use an independently implemented client and record exact host and SDK builds, registration modes, and results. Include IBM Bob and mark every other client as passed, failed, or not yet tested. A manually issued test token does not establish that sign-in works.

This work depends on #2625, #2642, and the companion authorization service identified in #2408. Discovery fallback and issuer-isolation fixtures cover cases that a client UI cannot inject.

This ticket is done when a reusable command passes against the packaged release candidate and the supported-client matrix has evidence. #2634 repeats the checks through the public deployment.

Status on October 23, 2026

No complete OAuth client qualification is recorded here yet. This still needs #2625, #2642 and a companion authorization-service owner, tracking reference and contract revision. PR #2652 changes the result text clients display, so check it during qualification.

Implementation requirements and source references

Tracking issue: #2408. Depends on #2624, #2625, #2642 and an implemented authorization-service contract.

Tracking correspondence: H1–H7 and L3. Full OAuth and independent-client verification. Shared requirement IDs remain stable across the delivery plan and #2408.

Outcome

Qualify the modern protocol and complete OAuth flow with an independently implemented client. Support is vendor-neutral. Include IBM Bob and other relevant hosts in the release matrix without naming one primary client or claiming untested versions work.

Protocol and host qualification

  • Pin an official SDK build with verified 2026-07-28 support. Record exact host/SDK/build versions and supported protocol revisions. Do not infer support from a product name or its latest release.
  • Exercise server/discover, complete tool listing/pagination, direct first request without discovery, an authorized read, a known application error and a successful subsequent call. Verify resultType, cache hints, structured output and usable result visibility.
  • Maintain rows for IBM Bob and relevant hosts such as Gemini Enterprise, Claude and Cursor. Mark each as passed, failed or not yet tested, with registration/redirect mode and evidence. A host missing the modern protocol or OAuth support needs an upgrade before connecting.
  • Exercise stream disconnect handling if streaming is enabled. Retries need new request IDs and must not blindly replay mutations.

OAuth qualification

Exercise the bearer-token integration from Data API PR #2617 with the final authorization-server contract. Record the exact implementation revision and verification configuration. The current resolver change alone does not prove an end-to-end OAuth flow.

  • Start without credentials, parse the 401 challenge, fetch protected resource metadata and discover the authorization server using RFC 8414 and OIDC Discovery cases, including path-aware issuer URLs.
  • Reject metadata issuer mismatch and missing PKCE-support metadata. Verify S256, resource on authorization and token requests, exact redirect/transaction binding and consent denial.
  • Use pre-registration or CIMD. Validate CIMD identifier/document agreement and redirect restrictions. If DCR is explicitly supported, require native/web application_type and test only that approved path.
  • Record the validated expected issuer before redirect. If iss is present, always compare it exactly before code exchange, even if support is unadvertised. If support is advertised true and iss is absent, reject. If both advertisement and iss are absent, this revision permits continuing. Test success and error callbacks without URL normalization.
  • Key issuer-issued registration credentials by issuer and never reuse them across authorization servers. A CIMD URL identifier is portable, which is distinct from issuer-issued credentials.
  • Validate authorized scope/tenant access and 401 versus 403 behavior. Reject ID tokens, AstraCS tokens and old custom token headers at MCP. Test refresh or reauthorization, revoked access and safe bounded step-up retries.
  • A locally issued test token can support protocol-only tests, but cannot substitute for a completed browser authorization flow in launch evidence.

Done when

One documented read-only-by-default command runs against the packaged release candidate with the integrated authorization service and is reusable against deployed servers using external configuration and redacted output. A reusable auth harness covers protocol edge cases that host UIs cannot inject. The matrix records actual results for each launch-supported client, including IBM Bob. Unverified clients remain explicit gaps, not implicit successes.

#2634 owns replaying the same client and policy through the deployed edge. Close this ticket on packaged qualification and the recorded client matrix, without waiting for deployment approval. #2627/#2628 remain separately tracked usability/error work and become gates when required for a qualified client.

Changelog traceability

Normative detail: Streamable HTTP, authorization, caching.

Discovery fixtures

Capture the URLs requested and their order. Prefer the resource_metadata URL from the parsed WWW-Authenticate challenge when present. Without that URL, try path-specific protected resource metadata and then root metadata. For an MCP endpoint at /v1/mcp, those fallback paths are /.well-known/oauth-protected-resource/v1/mcp and /.well-known/oauth-protected-resource.

Exercise authorization-server discovery in the following order. Each row uses paths on the selected issuer's host. Make earlier locations unavailable in turn to exercise every fallback.

Issuer path First attempt Second attempt Third attempt
/tenant1 /.well-known/oauth-authorization-server/tenant1 /.well-known/openid-configuration/tenant1 /tenant1/.well-known/openid-configuration
No path /.well-known/oauth-authorization-server /.well-known/openid-configuration None

Reject resource-identifier mismatches and metadata whose issuer differs from the expected issuer before using its endpoints. Include trailing-slash differences. Compare exact values without URL normalization.

Exercise the existing credential-isolation requirement using two issuers and a change to the issuer advertised in resource metadata. Verify that issuer-issued credentials and tokens are never reused with the other issuer. Preserve the existing exception for portable CIMD identifiers. These fixtures do not require multiple production authorization servers.

Link the companion authorization-service owner and contract reference recorded in #2408. Record which metadata mechanism that service publishes and verify its actual public URL during integration.

See MCP discovery, RFC 9728 section 3.3, RFC 8414 sections 3.3–4, OIDC section 4.3, and authorization-server binding.

Activity

  1. changed the title [-]Add an independent SDK smoke test for Data API MCP[/-] [+]MCP: Add an independent SDK smoke test[/+] on Oct 12, 2026
  2. changed the title [-]MCP: Add an independent SDK smoke test[/-] [+]MCP: Test the upgrade with an independent client[/+] on Oct 12, 2026
  3. added
    MCP upgradeRequired work to deliver the MCP package upgrade.
    on Oct 12, 2026
  4. changed the title [-]MCP: Test the upgrade with an independent client[/-] [+]MCP: Qualify independent clients and the OAuth handshake[/+] on Oct 12, 2026
  5. added
    MCP launch requiredRelease gate for the OAuth and modern-protocol MCP launch
    MCP handshakeOAuth protected resource, authorization and client qualification
    and removed
    MCP upgradeRequired work to deliver the MCP package upgrade.
    on Oct 12, 2026
  6. changed the title [-]MCP: Qualify independent clients and the OAuth handshake[/-] [+]MCP: Test OAuth sign-in with supported clients[/+] on Oct 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    MCP handshakeOAuth protected resource, authorization and client qualificationMCP launch requiredRelease gate for the OAuth and modern-protocol MCP launch

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions