@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sassoftware/sas-score-mcp-serverjs",
3
- "version": "0.3.17",
3
+ "version": "0.3.18",
4
4
  "description": "A mcp server for SAS Viya",
5
5
  "author": "Deva Kumar <deva.kumar@sas.com>",
6
6
  "license": "Apache-2.0",
@@ -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
- // we have session id, get existing transport
141
- console.error('>>>>>>>>>>>>>> Received request for MCP endpoint with session ID:', req.method, sessionId);
142
- if (sessionId != null) {
143
- console.error("Looking for transport with session ID:", sessionId);
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
- else if (!sessionId && isInitializeRequest(req.body)) {
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);