Repository navigation
feat(server): add SEP-2350 scope challenge scenario - #481
SamMorrowDrums wants to merge 4 commits into
Conversation
Exercise request-time insufficient_scope challenges across tools, static and templated resources, and prompts with a portable cross-SDK fixture contract. Make server WARNING checks gate conformance consistently. Closes modelcontextprotocol#480 Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
commit: |
Keep SHOULD-level warnings blocking while making optional session and inconclusive lifecycle diagnostics informational. Accept valid advertised protected-resource metadata locations, preserve RFC 9728 path semantics, and enforce token grammar for bare auth parameters. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Keep normative warnings blocking while reporting acceptable timing and fixture diagnostics as informational. Skip the SEP-2350 completeness verdict when no parseable Bearer challenge exists. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
Hey @SamMorrowDrums, I think this one has drifted into conflicts with main since early Sept. Looks like just two files. src/scenarios/index.ts is the registry, where #330 and #396 both added entries. Also in case it helps get this reviewed, mcpkit (Go) still passes it 17/17 with no warnings at 992406b. So that's two SDKs green against it now that the TS side has merged. I can push a rebased branch you can pull from if that's easier. |
Retain SEP-2350 scope challenges alongside main's skills scenarios. Preserve main's lower-bound-only SSE retry timing and test early, boundary, late, and missing timing observations. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
Thanks @panyam for flagging the drift and for testing against mcpkit — much appreciated! I've merged main and resolved the conflicts in @pcarleton could you take another look when you get a chance? |
Summary
insufficient_scopechallengestools/call, static and templatedresources/read, andprompts/getwith a fixed cross-SDK fixture contractsep-2350-server-single-challengetraceability and document the portable SUT contractThe scenario uses existing primitive fixtures and opaque test tokens, so the negative result is observable wire behavior rather than a missing TypeScript API or test-only primitive. The core scenario does not import or depend on the TypeScript SDK.
A/B proof
Both legs used this conformance branch's official
sdk ... --mode server --scenario sep-2350-server-scope-challenge --spec-version 2026-07-28path.modelcontextprotocol/typescript-sdk@main(dcc01028)SUCCESS=5,WARNING=12, exit1; four warnings each for HTTP 403,WWW-Authenticate, andsep-2350-server-single-challenge; all four full-token retries succeededSamMorrowDrums/typescript-sdk@scope-challenge-server-sdk(54e8deda)SUCCESS=17, no warnings or failures, exit0The feature fixture adapter is part of modelcontextprotocol/typescript-sdk#1624 and remains independent from this branch. The latest green run includes the maintainer-requested reuse of bearer-auth metadata configuration through verified
AuthInfo.Validation
npm test— 45 files, 541 tests passednpm run lintnpm run typechecknpm run build54e8deda— 17/17 official scenario checks passedReferences