From 54d6929149387f197c4554115b9242f31e6dbe7c Mon Sep 17 00:00:00 2001 From: ihrpr Date: Tue, 15 Apr 2025 11:58:43 +0100 Subject: [PATCH] don't need to re-initialize when we reconnect a session --- src/client/index.ts | 6 +++++- src/server/streamableHttp.ts | 5 ++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/client/index.ts b/src/client/index.ts index 64ea62c4..a3edd0be 100644 --- a/src/client/index.ts +++ b/src/client/index.ts @@ -126,7 +126,11 @@ export class Client< override async connect(transport: Transport, options?: RequestOptions): Promise { await super.connect(transport); - + // When transport sessionId is already set this means we are trying to reconnect. + // In this case we don't need to initialize again. + if (transport.sessionId !== undefined) { + return; + } try { const result = await this.request( { diff --git a/src/server/streamableHttp.ts b/src/server/streamableHttp.ts index 012458f2..fed85ad9 100644 --- a/src/server/streamableHttp.ts +++ b/src/server/streamableHttp.ts @@ -331,11 +331,10 @@ export class StreamableHTTPServerTransport implements Transport { const isInitializationRequest = messages.some( msg => 'method' in msg && msg.method === 'initialize' ); - const mcpSessionId = req.headers["mcp-session-id"] as string | undefined; if (isInitializationRequest) { // If it's a server with session management and the session ID is already set we should reject the request // to avoid re-initialization. - if (this._initialized && this.sessionId !== undefined && mcpSessionId !== this.sessionId) { + if (this._initialized) { res.writeHead(400).end(JSON.stringify({ jsonrpc: "2.0", error: { @@ -357,7 +356,7 @@ export class StreamableHTTPServerTransport implements Transport { })); return; } - this.sessionId = mcpSessionId ?? this.sessionIdGenerator(); + this.sessionId = this.sessionIdGenerator(); this._initialized = true; }