@@ -40,9 +40,8 @@ const logger = pino({
40
40
41
41
const SOCKET_API_URL = "https://api.socket.dev/v0/purl?alerts=false&compact=false&fixable=false&licenseattrib=false&licensedetails=false" ;
42
42
43
- let SOCKET_API_KEY = process . env . SOCKET_API_KEY || "" ;
44
- if ( ! SOCKET_API_KEY ) {
45
- logger . error ( "SOCKET_API_KEY environment variable is not set" ) ;
43
+ // Function to get API key interactively (only for HTTP mode)
44
+ async function getApiKeyInteractively ( ) : Promise < string > {
46
45
const rl = readline . createInterface ( {
47
46
input : process . stdin ,
48
47
output : process . stderr
@@ -60,15 +59,11 @@ if (!SOCKET_API_KEY) {
60
59
process . exit ( 1 ) ;
61
60
}
62
61
63
- SOCKET_API_KEY = apiKey ;
62
+ return apiKey ;
64
63
}
65
64
66
- const SOCKET_HEADERS = {
67
- "user-agent" : `socket-mcp/${ VERSION } ` ,
68
- "accept" : "application/x-ndjson" ,
69
- "content-type" : "application/json" ,
70
- "authorization" : `Bearer ${ SOCKET_API_KEY } `
71
- } ;
65
+ // Initialize API key
66
+ let SOCKET_API_KEY = process . env . SOCKET_API_KEY || "" ;
72
67
73
68
// Transport management
74
69
const transports : Record < string , StreamableHTTPServerTransport > = { } ;
@@ -164,10 +159,8 @@ server.tool(
164
159
. map ( ( [ key , value ] ) => `${ key } : ${ value } ` )
165
160
. join ( ', ' ) ;
166
161
167
- const packageName = jsonData . name || 'unknown' ;
168
162
results . push ( `${ purl } : ${ scoreEntries } ` ) ;
169
163
} else {
170
- const packageName = jsonData . name || 'unknown' ;
171
164
results . push ( `${ purl } : No score found` ) ;
172
165
}
173
166
}
@@ -180,7 +173,6 @@ server.tool(
180
173
. map ( ( [ key , value ] ) => `${ key } : ${ value } ` )
181
174
. join ( ', ' ) ;
182
175
183
- const packageName = jsonData . package ?. name || 'unknown' ;
184
176
results . push ( `${ purl } : ${ scoreEntries } ` ) ;
185
177
}
186
178
}
@@ -221,6 +213,28 @@ server.tool(
221
213
const useHttp = process . env . MCP_HTTP_MODE === 'true' || process . argv . includes ( '--http' ) ;
222
214
const port = parseInt ( process . env . MCP_PORT || '3000' , 10 ) ;
223
215
216
+ // Validate API key - in stdio mode, we can't prompt interactively
217
+ if ( ! SOCKET_API_KEY ) {
218
+ if ( useHttp ) {
219
+ // In HTTP mode, we can prompt for the API key
220
+ logger . error ( "SOCKET_API_KEY environment variable is not set" ) ;
221
+ SOCKET_API_KEY = await getApiKeyInteractively ( ) ;
222
+ } else {
223
+ // In stdio mode, we must have the API key as an environment variable
224
+ logger . error ( "SOCKET_API_KEY environment variable is required in stdio mode" ) ;
225
+ logger . error ( "Please set the SOCKET_API_KEY environment variable and try again" ) ;
226
+ process . exit ( 1 ) ;
227
+ }
228
+ }
229
+
230
+ // Now that we have the API key, set up the headers
231
+ const SOCKET_HEADERS = {
232
+ "user-agent" : `socket-mcp/${ VERSION } ` ,
233
+ "accept" : "application/x-ndjson" ,
234
+ "content-type" : "application/json" ,
235
+ "authorization" : `Bearer ${ SOCKET_API_KEY } `
236
+ } ;
237
+
224
238
if ( useHttp ) {
225
239
// HTTP mode with Server-Sent Events
226
240
logger . info ( `Starting HTTP server on port ${ port } ` ) ;
0 commit comments