Repository navigation
Description
Finding
The @modelcontextprotocol/client / server / core 2.0.0 → 2.3.0 bumps (Dependabot PRs #190 and #191, held by #196 / PR #198) cannot land as-is: under SDK 2.3.0, two packages/core MCP OAuth tests fail on behaviour changes in the SDK, and the repo carries a version-keyed patch for the old client.
Evidence (PR #198 CI, run 39511814754, unit (linux) job 118934427553)
Failed package: @opencode/core#test — exactly 2 failures, both in packages/core/test/mcp-oauth.test.ts:
discovers resource metadata without the query the transport dialed(test at line 366): under 2.3.0 the protected-resource metadata probe list is["/.well-known/oauth-protected-resource/mcp?codemode=false", "/.well-known/oauth-protected-resource", "/.well-known/oauth-authorization-server", "/.well-known/openid-configuration"]— the first probe now carries the dialed URL's query string, where 2.0.0 probed the clean path/.well-known/oauth-protected-resource/mcp. The test asserts no probe containscodemode.requests offline_access without forcing a consent prompt(assertion at line 474):url.searchParams.has("prompt")is nowtrue— under 2.3.0 the authorization URL gains apromptparameter whenoffline_accessis added to the scope; 2.0.0 added none.
Verified locally: the same file passes 21/21 on 2.0.0 (current main) and fails exactly these 2 on 2.3.0.
Third adaptation item: patches/@modelcontextprotocol%2Fclient@2.0.0.patch is keyed to client 2.0.0 — a 2.3.0 bump needs the patch re-based or confirmed obsolete (bun.lock's patchedDependencies entry must move with the version).
What to decide / do
- For (1): determine whether 2.3.0's query-carrying probe is an SDK regression to work around in core (strip the query for discovery) or intended behaviour the test should accept. Note the neighbouring test
keeps the configured URL as the resource when metadata echoes the dialed querystill passes — the resource value handling did not change, only the probe path. - For (2): determine whether the new
promptvalue is acceptable product behaviour (it changes the consent UX of MCP OAuth) or should be suppressed via whatever option 2.3.0 exposes. - Re-base or drop the client patch, bump all three
@modelcontextprotocol/*pins together (client, server, and the direct core pin inpackages/core/package.json— see Dependabot PRs change package.json without bun.lock, so every one fails the frozen-lockfile CI install and can never merge #196 for why they must move as one), regeneratebun.lock, and close chore(deps-dev): bump @modelcontextprotocol/server from 2.0.0 to 2.3.0 in /packages/core #190/chore(deps): bump @modelcontextprotocol/client from 2.0.0 to 2.3.0 in /packages/core #191 as superseded.
Acceptance criteria
- All three
@modelcontextprotocol/*pins at 2.3.0 with a regeneratedbun.lock;bun install --frozen-lockfilepasses. -
packages/core/test/mcp-oauth.test.tsfully green, with any test changes justified by a recorded decision on (1) and (2) above. - The client patch is re-based to 2.3.0 or removed with evidence it is no longer needed.
- PRs chore(deps-dev): bump @modelcontextprotocol/server from 2.0.0 to 2.3.0 in /packages/core #190 and chore(deps): bump @modelcontextprotocol/client from 2.0.0 to 2.3.0 in /packages/core #191 closed as superseded by the landing PR.
Single-repo: the MCP SDK is consumed only by this repo's core package (grep-verified across code/openchamber/nix during #196).
Activity
docs: record the #196 and #199 completions in ROADMAP Done (#208) (#209)