@sassoftware/sas-score-mcp-serverjs 0.3.17 → 0.3.18
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/package.json +1 -1
- package/src/expressMcpServer.js +38 -37
package/package.json
CHANGED
package/src/expressMcpServer.js
CHANGED
|
@@ -136,14 +136,46 @@ const handleRequest = async (req, res) => {
|
|
|
136
136
|
try {
|
|
137
137
|
|
|
138
138
|
let sessionId = req.headers["mcp-session-id"];
|
|
139
|
+
console.error("========================================================");
|
|
140
|
+
console.error("post /mcp called with session ID:", sessionId);
|
|
141
|
+
let body = (req.body == null) ? 'no body' : JSON.stringify(req.body);
|
|
142
|
+
console.error('[Note] Payload is ', body);
|
|
143
|
+
if (/*!sessionId &&*/ isInitializeRequest(req.body)) {
|
|
144
|
+
// create transport
|
|
145
|
+
console.error("[Note] Initializing new transport for MCP session...");
|
|
146
|
+
|
|
147
|
+
transport = new StreamableHTTPServerTransport({
|
|
148
|
+
sessionIdGenerator: () => randomUUID(),
|
|
149
|
+
enableJsonResponse: true,
|
|
150
|
+
enableDnsRebindingProtection: true,
|
|
151
|
+
onsessioninitialized: (sessionId) => {
|
|
152
|
+
// Store the transport by session ID
|
|
153
|
+
console.error('Session initialized');
|
|
154
|
+
console.error("[Note] Transport initialized with ID:", sessionId);
|
|
155
|
+
transports[sessionId] = transport;
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
// Clean up transport when closed
|
|
159
|
+
transport.onclose = () => {
|
|
160
|
+
if (transport.sessionId) {
|
|
161
|
+
delete transports[transport.sessionId];
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
console.error("[Note] Connecting mcpServer to new transport...");
|
|
165
|
+
await mcpServer.connect(transport);
|
|
139
166
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
167
|
+
// Save transport data and app context for use in tools
|
|
168
|
+
console.error('connected mcpServer');
|
|
169
|
+
cache.set("transports", transports);
|
|
170
|
+
return await transport.handleRequest(req, res, req.body);
|
|
171
|
+
// cache transport
|
|
172
|
+
|
|
173
|
+
} else if (sessionId != null) {
|
|
174
|
+
console.error('[Note] Incoming session ID:', sessionId);
|
|
144
175
|
transport = transports[sessionId];
|
|
145
|
-
console.error("Found transport:", transport != null);
|
|
176
|
+
console.error("[Note] Found transport:", transport != null);
|
|
146
177
|
if (transport == null) {
|
|
178
|
+
// this can happen if client is holding on to old session id
|
|
147
179
|
console.error("[Error] No transport found for session ID:", sessionId, "Returning a 400 error with instructions for the user");
|
|
148
180
|
res.status(400).send(`Invalid or missing session ID ${sessionId}. Please ensure your MCP client is configured to use the correct session ID returned in the 'mcp-session-id' header of the response from the /mcp endpoint.`);
|
|
149
181
|
return;
|
|
@@ -170,38 +202,7 @@ const handleRequest = async (req, res) => {
|
|
|
170
202
|
}
|
|
171
203
|
|
|
172
204
|
// initialize request
|
|
173
|
-
|
|
174
|
-
// create transport
|
|
175
|
-
console.error("[Note] Initializing new transport for MCP session...");
|
|
176
|
-
console.error({body: JSON.stringify(req.body)});
|
|
177
|
-
transport = new StreamableHTTPServerTransport({
|
|
178
|
-
sessionIdGenerator: () => randomUUID(),
|
|
179
|
-
enableJsonResponse: true,
|
|
180
|
-
enableDnsRebindingProtection: true,
|
|
181
|
-
onsessioninitialized: (sessionId) => {
|
|
182
|
-
// Store the transport by session ID
|
|
183
|
-
console.error("++++++++++++++++++++++++++++++ Transport initialized with ID:", sessionId);
|
|
184
|
-
transports[sessionId] = transport;
|
|
185
|
-
},
|
|
186
|
-
});
|
|
187
|
-
// Clean up transport when closed
|
|
188
|
-
transport.onclose = () => {
|
|
189
|
-
if (transport.sessionId) {
|
|
190
|
-
delete transports[transport.sessionId];
|
|
191
|
-
}
|
|
192
|
-
};
|
|
193
|
-
console.error("[Note] Connecting mcpServer to new transport...");
|
|
194
|
-
console.error('connecting mcp Server with session ID:', transport.sessionId);
|
|
195
|
-
console.error('>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> connecting mcp Server with session ID:', transport.sessionId);
|
|
196
|
-
await mcpServer.connect(transport);
|
|
197
|
-
|
|
198
|
-
// Save transport data and app context for use in tools
|
|
199
|
-
console.error('connected mcpServer');
|
|
200
|
-
cache.set("transports", transports);
|
|
201
|
-
return await transport.handleRequest(req, res, req.body);
|
|
202
|
-
// cache transport
|
|
203
|
-
|
|
204
|
-
}
|
|
205
|
+
|
|
205
206
|
}
|
|
206
207
|
catch (error) {
|
|
207
208
|
console.error("Error handling MCP request:", error);
|