inspector/specification
Repository files (latest commit first)
Filename Latest commit message Latest commit date
cliffhall 5feebf25c2 OAuth: re-key store to (server, issuer) + SEP-837/2350/2352 auth UX (#1625)
Re-key the persisted OAuth store to (server, issuer) and add the
SEP-837/2350/2352 authorization-hardening UX. The SDK v2 auth() drives the
SEP-2352 flow off the provider's ctx.issuer; the Inspector's job is to honor it
and round-trip the issuer stamp.

SEP-2352 — issuer-bound credentials
- ServerOAuthState nests issuer-bound credentials under
  byIssuer[issuer] = { clientInformation, clientRegistrationKind, tokens }, with
  an activeIssuer pointer answering the transport's ctx-less per-request bearer
  read.
- Fix a latent bug: OAuthStorageBase re-parsed tokens/client-info through
  OAuthTokensSchema/OAuthClientInformationSchema, which strip the non-RFC
  `issuer` field and silently defeat the SDK's discardIfIssuerMismatch. The
  store re-attaches the stamp from the byIssuer key.
- BaseOAuthClientProvider threads ctx.issuer and implements
  discoveryState()/saveDiscoveryState() (activates the SDK's callback-leg
  AuthorizationServerMismatchError binding check) and invalidateCredentials().
- Lazy, migration-free upgrade: a legacy pre-1625 blob's top-level
  clientInformation/tokens are returned as an unkeyed fallback until the first
  issuer-stamped save promotes them into byIssuer.

SEP-837 — application_type
- DCR declares application_type: "native" (localhost Inspector).
- ClientSettingsForm renders RegistrationRejectedError detail and reflects DCR's
  deprecated-in-favor-of-CIMD (SEP-991) status.

SEP-2350 — step-up scope union
- Per-server onInsufficientScope (reauthorize | throw) setting wired
  ServerSettingsForm -> StoredMCPServer.oauth -> StreamableHTTPClientTransport.
- StepUpAuthModal visualizes the prior-union-challenged scope set, tagging each
  scope `new` vs `already granted`.

mcpAuth simplification
- Delete the hand-rolled authorizeWithoutRefresh (mishandled issuer stamping);
  forward forceReauthorization/skipIssuerMetadataValidation to native SDK auth()
  so both the initial and step-up paths get SEP-2352 stamping.

Vocabulary + docs
- OAuthStep gains cimd_fetch / issuer_comparison / scope_step_up (recorded on a
  step-up redirect); the Network tab labels auth requests by OAuth phase.
- v2_auth_hardening.md gains an as-built status section.

Deferred to the era-aware card: the SdkError(EraNegotiationFailed) ->
UnauthorizedError unwrap and finishAuth(URLSearchParams) form (only fire under
non-legacy negotiation).

Closes #1625

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-16 13:53:13 -04:00
..
diagrams refactor(version): single-source the version from the root package.json 2026-07-10 17:31:21 -04:00
screenshots docs(apps): specify the v2 Apps tab (#1265) 2026-04-29 17:22:59 -04:00
README.md docs(spec): add V2 Auth landing page and canonicalize spec top menus (closes #1605) 2026-07-02 17:20:06 -04:00
v1_problems.md docs(spec): add V2 Auth landing page and canonicalize spec top menus (closes #1605) 2026-07-02 17:20:06 -04:00
v2_auth.md docs(spec): add V2 Auth landing page and canonicalize spec top menus (closes #1605) 2026-07-02 17:20:06 -04:00
v2_auth_ema.md Removed Zustand storage, cleanup up auth storage IO interfaces, implementations, and usage. 2026-07-04 21:56:45 -07:00
v2_auth_hardening.md OAuth: re-key store to (server, issuer) + SEP-837/2350/2352 auth UX (#1625) 2026-07-16 13:53:13 -04:00
v2_auth_mid_session.md Removed Zustand storage, cleanup up auth storage IO interfaces, implementations, and usage. 2026-07-04 21:56:45 -07:00
v2_auth_smoke_testing.md Removed Zustand storage, cleanup up auth storage IO interfaces, implementations, and usage. 2026-07-04 21:56:45 -07:00
v2_catalog_launch_config.md docs(spec): add V2 Auth landing page and canonicalize spec top menus (closes #1605) 2026-07-02 17:20:06 -04:00
v2_cli_tui_launcher.md Merge remote-tracking branch 'origin/v2/main' into 1579-wave-1 2026-07-09 09:41:08 -04:00
v2_new_spec_impact.md Removed Zustand storage, cleanup up auth storage IO interfaces, implementations, and usage. 2026-07-04 21:56:45 -07:00
v2_scope.md Removed Zustand storage, cleanup up auth storage IO interfaces, implementations, and usage. 2026-07-04 21:56:45 -07:00
v2_screenshots.md docs(spec): add V2 Auth landing page and canonicalize spec top menus (closes #1605) 2026-07-02 17:20:06 -04:00
v2_server.md docs(spec): add V2 Auth landing page and canonicalize spec top menus (closes #1605) 2026-07-02 17:20:06 -04:00
v2_servers_file.md Removed Zustand storage, cleanup up auth storage IO interfaces, implementations, and usage. 2026-07-04 21:56:45 -07:00
v2_storage.md Removed Zustand storage, cleanup up auth storage IO interfaces, implementations, and usage. 2026-07-04 21:56:45 -07:00
v2_ux.md docs(spec): add V2 Auth landing page and canonicalize spec top menus (closes #1605) 2026-07-02 17:20:06 -04:00
v2_ux_components.md Removed Zustand storage, cleanup up auth storage IO interfaces, implementations, and usage. 2026-07-04 21:56:45 -07:00
v2_ux_features.md docs(spec): add V2 Auth landing page and canonicalize spec top menus (closes #1605) 2026-07-02 17:20:06 -04:00
v2_ux_handlers.md docs(spec): add V2 Auth landing page and canonicalize spec top menus (closes #1605) 2026-07-02 17:20:06 -04:00
v2_ux_interfaces.md docs(spec): add V2 Auth landing page and canonicalize spec top menus (closes #1605) 2026-07-02 17:20:06 -04:00
v2_ux_interfaces_phase_0_4_inventory.md Phase 0 foundations for component interfaces refactor 2026-04-15 16:06:23 -04:00
v2_ux_interfaces_plan.md docs(spec): add V2 Auth landing page and canonicalize spec top menus (closes #1605) 2026-07-02 17:20:06 -04:00
v2_ux_storybook.md docs(spec): add V2 Auth landing page and canonicalize spec top menus (closes #1605) 2026-07-02 17:20:06 -04:00
v2_web_client.md docs(spec): add V2 Auth landing page and canonicalize spec top menus (closes #1605) 2026-07-02 17:20:06 -04:00

Inspector V2 Brief

Brief | V1 Problems | V2 Scope | V2 Tech Stack | V2 UX | V2 Auth | V2 New Spec Impact

Table of Contents

Motivation and Context

The existing Inspector is hard to maintain for a number of reasons. We decided to create a more maintainable Inspector from the ground up, that retains the deterministic boundary of operation, but exposes a plugin architecture.

Track Protocol Conformance

  • Identify any gaps in V1 inspector
  • Track which features are covered
  • Implement to parity and fill gaps
  • Provide conformance testing in CI

Improve Maintainability

  • Clearer separation of concerns
  • Smaller, reusable components

Provide Extensibility

  • Plugin SDK / API
  • Third parties cand develop/maintain their own plugins for features such as
    • LLM usage
    • Evals
    • Multiple server connections
    • Apps playground
    • Testing of registry configuration
    • Interface with registry

Proper Documentation

  • One big README won't cut it anymore
  • Published documentation in MDX should
    • Render in style of spec
    • Kept up to date
    • Cover all features
    • Discuss troubleshooting strategies
    • Provide detailed contribution guidance that explains architecture and expected idioms