Skip to content

Commit a85b29a

Browse files
committed
fix: create new McpServer instance per transport to prevent 'Already connected' error
1 parent fc9597f commit a85b29a

File tree

2 files changed

+12
-14
lines changed

2 files changed

+12
-14
lines changed

src/api/controllers/mcp.controller.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,10 @@ export class McpController {
6969
}
7070
};
7171

72-
// Connect transport to MCP server
73-
console.log('[MCP] Creating new transport and connecting to server');
74-
const server = await this.mcpService.getServer();
72+
// CRITICAL FIX: Create NEW server instance per transport
73+
// Each transport needs its own server connection
74+
console.log('[MCP] Creating new server instance for transport');
75+
const server = await this.mcpService.createServer();
7576
await server.connect(transport);
7677
}
7778

src/mcp/services/mcp.service.ts

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ export interface ConnectionState {
1616
@Injectable()
1717
export class McpService {
1818
private readonly logger = new Logger(McpService.name);
19-
private server: McpServer | null = null;
2019
// Store connection states by session ID (in production, use Redis or similar)
2120
private readonly connectionStates = new Map<string, ConnectionState>();
2221

@@ -26,15 +25,13 @@ export class McpService {
2625
) {}
2726

2827
/**
29-
* Get or create the MCP Server instance
28+
* Create a NEW MCP Server instance
29+
* IMPORTANT: Each transport needs its own server instance
30+
* The official SDK's server.connect() can only be called once per server
3031
*/
31-
async getServer(): Promise<McpServer> {
32-
if (this.server) {
33-
return this.server;
34-
}
35-
32+
async createServer(): Promise<McpServer> {
3633
// Create MCP server with official SDK
37-
this.server = new McpServer(
34+
const server = new McpServer(
3835
{
3936
name: 'IoT Cloud MCP Bridge',
4037
version: '1.0.0',
@@ -48,10 +45,10 @@ export class McpService {
4845
);
4946

5047
// Register all tools
51-
this.registerTools(this.server);
48+
this.registerTools(server);
5249

53-
this.logger.log('MCP Server initialized successfully with official SDK');
54-
return this.server;
50+
this.logger.log('MCP Server instance created with official SDK');
51+
return server;
5552
}
5653

5754
/**

0 commit comments

Comments
 (0)