@@ -16,6 +16,7 @@ type Args = {
1616 cli: boolean ;
1717 transport ? : "stdio" | "sse" | "streamable-http" ;
1818 serverUrl ? : string ;
19+ headers ? : Record < string , string > ;
1920} ;
2021
2122type CliOptions = {
@@ -25,6 +26,7 @@ type CliOptions = {
2526 cli ? : boolean ;
2627 transport ? : string ;
2728 serverUrl ? : string ;
29+ header ? : Record < string , string > ;
2830} ;
2931
3032type ServerConfig =
@@ -127,6 +129,9 @@ async function runCli(args: Args): Promise<void> {
127129 // Build CLI arguments
128130 const cliArgs = [ cliPath ] ;
129131
132+ // Add target URL/command first
133+ cliArgs . push ( args . command , ...args . args ) ;
134+
130135 // Add transport flag if specified
131136 if ( args . transport && args . transport !== "stdio" ) {
132137 // Convert streamable-http back to http for CLI mode
@@ -135,8 +140,12 @@ async function runCli(args: Args): Promise<void> {
135140 cliArgs . push ( "--transport" , cliTransport ) ;
136141 }
137142
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+ }
140149
141150 await spawnPromise ( "node" , cliArgs , {
142151 env : { ...process . env , ...args . envArgs } ,
@@ -201,6 +210,30 @@ function parseKeyValuePair(
201210 return { ...previous , [ key as string ] : val } ;
202211}
203212
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+
204237function parseArgs ( ) : Args {
205238 const program = new Command ( ) ;
206239
@@ -227,7 +260,13 @@ function parseArgs(): Args {
227260 . option ( "--server <n>" , "server name from config file" )
228261 . option ( "--cli" , "enable CLI mode" )
229262 . 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+ ) ;
231270
232271 // Parse only the arguments before --
233272 program . parse ( preArgs ) ;
@@ -280,6 +319,7 @@ function parseArgs(): Args {
280319 envArgs : { ...( config . env || { } ) , ...( options . e || { } ) } ,
281320 cli : options . cli || false ,
282321 transport : "stdio" ,
322+ headers : options . header ,
283323 } ;
284324 } else if ( config . type === "sse" || config . type === "streamable-http" ) {
285325 return {
@@ -289,6 +329,7 @@ function parseArgs(): Args {
289329 cli : options . cli || false ,
290330 transport : config . type ,
291331 serverUrl : config . url ,
332+ headers : options . header ,
292333 } ;
293334 } else {
294335 // Backwards compatibility: if no type field, assume stdio
@@ -298,6 +339,7 @@ function parseArgs(): Args {
298339 envArgs : { ...( ( config as any ) . env || { } ) , ...( options . e || { } ) } ,
299340 cli : options . cli || false ,
300341 transport : "stdio" ,
342+ headers : options . header ,
301343 } ;
302344 }
303345 }
@@ -319,6 +361,7 @@ function parseArgs(): Args {
319361 cli : options . cli || false ,
320362 transport : transport as "stdio" | "sse" | "streamable-http" | undefined ,
321363 serverUrl : options . serverUrl ,
364+ headers : options . header ,
322365 } ;
323366}
324367
0 commit comments