@xingyuchen/mysql-mcp-server 4.0.5 → 4.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +25 -17
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -51,11 +51,28 @@ function extractDatabaseConfigsFromHeaders(req) {
|
|
|
51
51
|
}
|
|
52
52
|
return configs;
|
|
53
53
|
}
|
|
54
|
+
// ==================== 初始化数据库连接(同步等待) ====================
|
|
55
|
+
async function initializeDatabaseConnections(dbManager, configs) {
|
|
56
|
+
if (configs.length === 0)
|
|
57
|
+
return;
|
|
58
|
+
console.log(`📋 检测到 ${configs.length} 个 Header 预配置,正在添加...`);
|
|
59
|
+
// 使用 for...of 确保顺序等待每个连接完成
|
|
60
|
+
for (const config of configs) {
|
|
61
|
+
try {
|
|
62
|
+
await dbManager.addConnection(config);
|
|
63
|
+
console.log(`✅ Header 连接已添加: ${config.id}`);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error(`❌ Header 连接失败 [${config.id}]:`, error);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
console.log(`📋 Header 预配置初始化完成,成功连接 ${dbManager.listConnections().length} 个`);
|
|
70
|
+
}
|
|
54
71
|
// ==================== 创建 MCP Server ====================
|
|
55
72
|
function createMCPServer(dbManager) {
|
|
56
73
|
const server = new Server({
|
|
57
74
|
name: "mysql-mcp-server",
|
|
58
|
-
version: "4.0.
|
|
75
|
+
version: "4.0.6"
|
|
59
76
|
}, {
|
|
60
77
|
capabilities: {
|
|
61
78
|
tools: {}
|
|
@@ -119,7 +136,7 @@ app.get("/health", (_req, res) => {
|
|
|
119
136
|
status: "healthy",
|
|
120
137
|
transport: "streamable-http",
|
|
121
138
|
activeSessions: sessions.size,
|
|
122
|
-
version: "4.0.
|
|
139
|
+
version: "4.0.6"
|
|
123
140
|
});
|
|
124
141
|
});
|
|
125
142
|
// ==================== MCP Endpoint ====================
|
|
@@ -145,12 +162,16 @@ app.post("/mcp", async (req, res) => {
|
|
|
145
162
|
else if (!sessionIdHeader && isInit) {
|
|
146
163
|
// 创建新会话(只在没有 session ID 且是 initialize 请求时)
|
|
147
164
|
const dbManager = new DatabaseConnectionManager();
|
|
165
|
+
// 🔧 关键修复:在创建会话之前,先同步初始化数据库连接
|
|
166
|
+
// 这样确保当 initialize 响应返回时,连接已经建立好了
|
|
167
|
+
const dbConfigs = extractDatabaseConfigsFromHeaders(req);
|
|
168
|
+
await initializeDatabaseConnections(dbManager, dbConfigs);
|
|
148
169
|
const server = createMCPServer(dbManager);
|
|
149
170
|
// 创建 transport 并使用回调管理会话
|
|
150
171
|
const transport = new StreamableHTTPServerTransport({
|
|
151
172
|
sessionIdGenerator: () => randomUUID(),
|
|
152
173
|
onsessioninitialized: (sessionId) => {
|
|
153
|
-
// 会话初始化回调
|
|
174
|
+
// 会话初始化回调 - 此时数据库连接已经建立好了
|
|
154
175
|
const newSession = {
|
|
155
176
|
id: sessionId,
|
|
156
177
|
server,
|
|
@@ -161,20 +182,7 @@ app.post("/mcp", async (req, res) => {
|
|
|
161
182
|
};
|
|
162
183
|
sessions.set(sessionId, newSession);
|
|
163
184
|
console.log(`🆕 新会话创建: ${sessionId}`);
|
|
164
|
-
|
|
165
|
-
const dbConfigs = extractDatabaseConfigsFromHeaders(req);
|
|
166
|
-
if (dbConfigs.length > 0) {
|
|
167
|
-
console.log(`📋 检测到 ${dbConfigs.length} 个 Header 预配置`);
|
|
168
|
-
dbConfigs.forEach(async (config) => {
|
|
169
|
-
try {
|
|
170
|
-
await dbManager.addConnection(config);
|
|
171
|
-
console.log(`✅ Header 连接已添加: ${config.id}`);
|
|
172
|
-
}
|
|
173
|
-
catch (error) {
|
|
174
|
-
console.error(`❌ Header 连接失败 [${config.id}]:`, error);
|
|
175
|
-
}
|
|
176
|
-
});
|
|
177
|
-
}
|
|
185
|
+
console.log(`📊 当前数据库连接数: ${dbManager.listConnections().length}`);
|
|
178
186
|
}
|
|
179
187
|
});
|
|
180
188
|
// 设置 transport 关闭处理
|