fix: throw error when connecting to already-connected Protocol#1441
fix: throw error when connecting to already-connected Protocol#1441codewithkenzo wants to merge 1 commit intomodelcontextprotocol:mainfrom
Conversation
Add check at start of connect() to throw if this._transport already exists. This prevents silent overwrites that break concurrent HTTP sessions. The error message suggests both close() and creating a new instance as options. Fixes modelcontextprotocol#1405
|
This implements the approach I outlined in my comment on the issue. The fix is minimal - just 8 lines in Happy to adjust anything based on feedback! |
🦋 Changeset detectedLatest commit: eb6e0e4 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
@modelcontextprotocol/client
@modelcontextprotocol/server
@modelcontextprotocol/express
@modelcontextprotocol/hono
@modelcontextprotocol/node
commit: |
|
Thanks for this. #1405 was fixed differently on main: |
Summary
Fixes #1405
Protocol.connect()now throws a descriptive error if called when already connected to a transport. This prevents silent overwrites that break concurrent HTTP sessions.Problem
When calling
connect()twice on the same Protocol instance, the second call would silently overwrite_transport, causing existing sessions to receiveAbortErroras responses get routed to the wrong transport.Solution
Add a guard at the start of
connect()that throws an informative error if_transportis already set. The error message suggests both options:close()before reconnectingThis follows the "fail fast" principle used by similar libraries (gRPC, Socket.io, tRPC).
Changes
packages/core/src/shared/protocol.ts: Add connected check with descriptive errorpackages/core/test/shared/protocolTransportHandling.test.ts: Update testsTesting