@@ -16,6 +16,7 @@ type Args = {
16
16
cli: boolean ;
17
17
transport ? : "stdio" | "sse" | "streamable-http" ;
18
18
serverUrl ? : string ;
19
+ headers ? : Record < string , string > ;
19
20
} ;
20
21
21
22
type CliOptions = {
@@ -25,6 +26,7 @@ type CliOptions = {
25
26
cli ? : boolean ;
26
27
transport ? : string ;
27
28
serverUrl ? : string ;
29
+ header ? : Record < string , string > ;
28
30
} ;
29
31
30
32
type ServerConfig =
@@ -127,6 +129,9 @@ async function runCli(args: Args): Promise<void> {
127
129
// Build CLI arguments
128
130
const cliArgs = [ cliPath ] ;
129
131
132
+ // Add target URL/command first
133
+ cliArgs . push ( args . command , ...args . args ) ;
134
+
130
135
// Add transport flag if specified
131
136
if ( args . transport && args . transport !== "stdio" ) {
132
137
// Convert streamable-http back to http for CLI mode
@@ -135,8 +140,12 @@ async function runCli(args: Args): Promise<void> {
135
140
cliArgs . push ( "--transport" , cliTransport ) ;
136
141
}
137
142
138
- // Add command and remaining args
139
- cliArgs . push ( args . command , ...args . args ) ;
143
+ // Add headers if specified
144
+ if ( args . headers ) {
145
+ for ( const [ key , value ] of Object . entries ( args . headers ) ) {
146
+ cliArgs . push ( "--header" , `${ key } : ${ value } ` ) ;
147
+ }
148
+ }
140
149
141
150
await spawnPromise ( "node" , cliArgs , {
142
151
env : { ...process . env , ...args . envArgs } ,
@@ -201,6 +210,30 @@ function parseKeyValuePair(
201
210
return { ...previous , [ key as string ] : val } ;
202
211
}
203
212
213
+ function parseHeaderPair (
214
+ value : string ,
215
+ previous : Record < string , string > = { } ,
216
+ ) : Record < string , string > {
217
+ const colonIndex = value . indexOf ( ":" ) ;
218
+
219
+ if ( colonIndex === - 1 ) {
220
+ throw new Error (
221
+ `Invalid header format: ${ value } . Use "HeaderName: Value" format.` ,
222
+ ) ;
223
+ }
224
+
225
+ const key = value . slice ( 0 , colonIndex ) . trim ( ) ;
226
+ const val = value . slice ( colonIndex + 1 ) . trim ( ) ;
227
+
228
+ if ( key === "" || val === "" ) {
229
+ throw new Error (
230
+ `Invalid header format: ${ value } . Use "HeaderName: Value" format.` ,
231
+ ) ;
232
+ }
233
+
234
+ return { ...previous , [ key ] : val } ;
235
+ }
236
+
204
237
function parseArgs ( ) : Args {
205
238
const program = new Command ( ) ;
206
239
@@ -227,7 +260,13 @@ function parseArgs(): Args {
227
260
. option ( "--server <n>" , "server name from config file" )
228
261
. option ( "--cli" , "enable CLI mode" )
229
262
. option ( "--transport <type>" , "transport type (stdio, sse, http)" )
230
- . option ( "--server-url <url>" , "server URL for SSE/HTTP transport" ) ;
263
+ . option ( "--server-url <url>" , "server URL for SSE/HTTP transport" )
264
+ . option (
265
+ "--header <headers...>" ,
266
+ 'HTTP headers as "HeaderName: Value" pairs (for HTTP/SSE transports)' ,
267
+ parseHeaderPair ,
268
+ { } ,
269
+ ) ;
231
270
232
271
// Parse only the arguments before --
233
272
program . parse ( preArgs ) ;
@@ -280,6 +319,7 @@ function parseArgs(): Args {
280
319
envArgs : { ...( config . env || { } ) , ...( options . e || { } ) } ,
281
320
cli : options . cli || false ,
282
321
transport : "stdio" ,
322
+ headers : options . header ,
283
323
} ;
284
324
} else if ( config . type === "sse" || config . type === "streamable-http" ) {
285
325
return {
@@ -289,6 +329,7 @@ function parseArgs(): Args {
289
329
cli : options . cli || false ,
290
330
transport : config . type ,
291
331
serverUrl : config . url ,
332
+ headers : options . header ,
292
333
} ;
293
334
} else {
294
335
// Backwards compatibility: if no type field, assume stdio
@@ -298,6 +339,7 @@ function parseArgs(): Args {
298
339
envArgs : { ...( ( config as any ) . env || { } ) , ...( options . e || { } ) } ,
299
340
cli : options . cli || false ,
300
341
transport : "stdio" ,
342
+ headers : options . header ,
301
343
} ;
302
344
}
303
345
}
@@ -319,6 +361,7 @@ function parseArgs(): Args {
319
361
cli : options . cli || false ,
320
362
transport : transport as "stdio" | "sse" | "streamable-http" | undefined ,
321
363
serverUrl : options . serverUrl ,
364
+ headers : options . header ,
322
365
} ;
323
366
}
324
367
0 commit comments