Repository navigation
chore(deps): upgrade dev dependencies - #80
Merged
Merged
Conversation
MCP SDK 2.3 follows same-origin redirects itself, calling the transport's fetch once per hop. A redirected MCP request (e.g. /mcp -> /mcp/) no longer matched serverUrl, so it inherited the OAuth abort signals: any credential invalidation or interactive exchange aborted in-flight MCP requests. Redirect targets learned from MCP responses now count as MCP traffic.
koistya
force-pushed
the
chore/upgrade-deps
branch
from
November 1, 2026 13:25
3d3b0de to
54c37d4
Compare
MCP SDK 2.4, TypeScript 7, Mermaid 12, VitePress alpha.21, and setup-node 7.1.0 in the release workflow. Supersedes the open Dependabot PRs. The built package is byte-identical. The MCP SDK peer floor rises to 2.3: earlier 2.x clients forward headers and request bodies, refresh tokens included, across origins on redirect (GHSA-6prh-2h8m-c8cw). @types/node moves to 22, the oldest supported Node, so APIs newer than the engines floor fail typecheck.
Learning any Location let a refused redirect (cross-origin, POST turned into GET) mark an OAuth endpoint as MCP traffic, exempting its requests from cancellation and the refresh-during-exchange guard. Nothing is learned when transportOptions leave redirects to fetch (redirectPolicy 'follow', requestInit.redirect 'manual' or 'error'). A malformed Location threw from the fetch wrapper, and parsing avoids URL.parse (Node 22.1+). The refresh guard now runs first.
koistya
force-pushed
the
chore/upgrade-deps
branch
from
November 1, 2026 14:06
9437e93 to
e422011
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Upgrades all dev dependencies to latest and raises the MCP SDK peer floor to 2.3. Supersedes Dependabot #77, #76, #64, #49 and #48. Also fixes a
browserAuth()regression that MCP SDK 2.3 introduced.@modelcontextprotocol/client/servertypescript@types/nodemermaidvitepressvitepress-plugin-llms@types/bun,bun-types@types/denoprettierpublintactions/setup-node(release.ymlpin)@modelcontextprotocol/client^2.2.0→^2.3.0: earlier 2.x clients forward headers and request bodies, refresh tokens included, across origins on redirect (GHSA-6prh-2h8m-c8cw). The docs and ADR-006 now say 2.3+.@types/nodefollows the oldest supported Node (engines: >=22), so APIs newer than that fail typecheck. Dependabot ignores its majors.dist/is byte-identical to the build onmain,.d.tsfiles included.vitepress-plugin-mermaiddeclares a peer range ofmermaid10 || 11. It only callsinitialize,renderandregisterExternalDiagrams, which Mermaid 12 still exports, and both diagram pages render.Version 3.2.0: minor, because installs still on SDK 2.2 now hit a peer conflict. The release also ships #78 and #79, merged since v3.1.1.
Redirected MCP traffic fix
MCP SDK 2.3 follows same-origin redirects itself, calling the transport's
fetchonce per hop. Thefetchthatconnect()installs makes OAuth requests abort on credential invalidation, but leaves MCP requests alone. It recognized MCP traffic only by an exactserverUrlmatch. So when a server redirects/mcp→/mcp/, every invalidation, or the start of an interactive exchange, aborted in-flight MCP requests such as a pending tool call.Each transport now learns the redirect targets of its MCP responses. It learns only those the SDK follows:
followableRedirect()mirrorsfetchWithinOrigin, and nothing is learned whentransportOptionsleave redirects to fetch (redirectPolicy: "follow",requestInit.redirect: "manual" | "error"). Otherwise a refused redirect could mark an OAuth endpoint as MCP traffic. The refresh-during-exchange guard now runs before the MCP check.Accepted limitation, recorded in ADR-006: a server that redirects its MCP endpoint to its own OAuth endpoint takes that endpoint's requests out of cancellation. Token saves stay generation-checked.
Verification
bun run validate(format, typecheck, 182 tests, build, publint), also with MCP SDK 2.3.0, the new peer minimumbun run test:runtimes(Node, Deno, Bun)bun run docs:build, plus a headless Chrome render of the Mermaid pages/mcp307 →/mcp/,invalidateCredentials("tokens" | "all")while a tool call is running) fails without the fix and passes with it.test/followable-redirect.test.tscovers the redirect rules case by case.