Skip to content

Commit c889f07

Browse files
committed
fix: mcp error
1 parent 4ccd917 commit c889f07

File tree

2 files changed

+18
-9
lines changed

2 files changed

+18
-9
lines changed

ecosystem/semi-mcp/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@douyinfe/semi-mcp",
3-
"version": "1.0.21",
3+
"version": "1.0.22",
44
"description": "Semi Design MCP Server - Model Context Protocol server for Semi Design components and documentation",
55
"type": "module",
66
"main": "./dist/index.js",

ecosystem/semi-mcp/src/http.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@
1313
*/
1414

1515
import { createServer, IncomingMessage, ServerResponse } from 'http';
16+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
1617
import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
1718
import { createMCPServer, getPackageVersion } from './server.js';
1819

19-
// 会话存储:sessionId -> transport
20+
// 会话存储:sessionId -> session info
2021
interface SessionInfo {
22+
server: Server; // 每个会话独立的 server 实例
2123
transport: StreamableHTTPServerTransport;
2224
lastActivity: number;
2325
requestQueue: Array<() => Promise<void>>;
@@ -142,9 +144,6 @@ async function main() {
142144
processedHosts = ['::'];
143145
}
144146

145-
// 创建 MCP 服务器
146-
const server = createMCPServer();
147-
148147
console.log(`[${new Date().toISOString()}] MCP 服务器已启动`);
149148
console.log(`[${new Date().toISOString()}] 模式: ${stateless ? '无状态 (Stateless)' : '有状态 (Stateful)'}`);
150149

@@ -194,24 +193,33 @@ async function main() {
194193
req.on('end', async () => {
195194
try {
196195
let transport: StreamableHTTPServerTransport;
196+
let mcpServer: Server;
197197

198198
if (stateless) {
199+
// 无状态模式:每个请求创建独立的 server 和 transport
200+
mcpServer = createMCPServer();
199201
transport = new StreamableHTTPServerTransport({
200202
sessionIdGenerator: undefined,
201203
});
202-
await server.connect(transport);
204+
await mcpServer.connect(transport);
203205
} else {
204206
if (sessionId && sessions.has(sessionId)) {
205-
transport = sessions.get(sessionId)!.transport;
206-
sessions.get(sessionId)!.lastActivity = Date.now();
207+
// 复用已有会话
208+
const session = sessions.get(sessionId)!;
209+
transport = session.transport;
210+
mcpServer = session.server;
211+
session.lastActivity = Date.now();
207212
} else {
213+
// 创建新会话:每个会话独立的 server 实例
208214
const newSessionId = sessionId || crypto.randomUUID();
215+
mcpServer = createMCPServer();
209216
transport = new StreamableHTTPServerTransport({
210217
sessionIdGenerator: () => newSessionId,
211218
});
212-
await server.connect(transport);
219+
await mcpServer.connect(transport);
213220

214221
sessions.set(newSessionId, {
222+
server: mcpServer,
215223
transport,
216224
lastActivity: Date.now(),
217225
requestQueue: [],
@@ -340,6 +348,7 @@ async function main() {
340348
for (const [sessionId, info] of sessions) {
341349
try {
342350
await info.transport.close();
351+
await info.server.close();
343352
} catch {
344353
// 忽略关闭错误
345354
}

0 commit comments

Comments
 (0)