@@ -197,11 +197,12 @@ func TestAddCmd_ServerWithArguments(t *testing.T) {
197197 t .Parallel ()
198198
199199 tests := []struct {
200- name string
201- pkg packages.Server
202- expectedRequiredEnvs []string
203- expectedRequiredValues []string
204- expectedRequiredBools []string
200+ name string
201+ pkg packages.Server
202+ expectedRequiredEnvs []string
203+ expectedRequiredPositionals []string
204+ expectedRequiredValues []string
205+ expectedRequiredBools []string
205206 }{
206207 {
207208 name : "server with all argument types" ,
@@ -307,7 +308,66 @@ func TestAddCmd_ServerWithArguments(t *testing.T) {
307308 "--optional-value" : {VariableType : packages .VariableTypeArg , Required : false },
308309 },
309310 },
310- // All empty since none are required
311+ },
312+ {
313+ name : "server all kinds of required args and envs" ,
314+ pkg : packages.Server {
315+ ID : "simple-server" ,
316+ Name : "Simple Server" ,
317+ Tools : []packages.Tool {
318+ {
319+ Name : "hello" ,
320+ },
321+ },
322+ Installations : map [runtime.Runtime ]packages.Installation {
323+ runtime .UVX : {
324+ Runtime : "uvx" ,
325+ Package : "mcp-server-simple" ,
326+ Version : "1.0.0" ,
327+ Recommended : true ,
328+ },
329+ },
330+ Arguments : packages.Arguments {
331+ "REQUIRED_ENV" : {
332+ VariableType : packages .VariableTypeEnv ,
333+ Required : true ,
334+ },
335+ "OPTIONAL_ENV" : {
336+ VariableType : packages .VariableTypeEnv ,
337+ Required : false ,
338+ },
339+ "RequiredPositional1" : {
340+ VariableType : packages .VariableTypeArgPositional ,
341+ Position : testIntPtr (t , 1 ),
342+ Required : true ,
343+ },
344+ "OptionalPositional2" : {
345+ VariableType : packages .VariableTypeArgPositional ,
346+ Position : testIntPtr (t , 2 ),
347+ Required : false ,
348+ },
349+ "--required-value" : {
350+ VariableType : packages .VariableTypeArg ,
351+ Required : true ,
352+ },
353+ "--optional-value" : {
354+ VariableType : packages .VariableTypeArg ,
355+ Required : false ,
356+ },
357+ "--required-flag" : {
358+ VariableType : packages .VariableTypeArgBool ,
359+ Required : true ,
360+ },
361+ "--optional-flag" : {
362+ VariableType : packages .VariableTypeArgBool ,
363+ Required : false ,
364+ },
365+ },
366+ },
367+ expectedRequiredEnvs : []string {"REQUIRED_ENV" },
368+ expectedRequiredPositionals : []string {"RequiredPositional1" },
369+ expectedRequiredValues : []string {"--required-value" },
370+ expectedRequiredBools : []string {"--required-flag" },
311371 },
312372 }
313373
@@ -334,6 +394,7 @@ func TestAddCmd_ServerWithArguments(t *testing.T) {
334394 require .True (t , cfg .addCalled )
335395 assert .Equal (t , tc .pkg .ID , cfg .entry .Name )
336396 assert .ElementsMatch (t , tc .expectedRequiredEnvs , cfg .entry .RequiredEnvVars )
397+ assert .ElementsMatch (t , tc .expectedRequiredPositionals , cfg .entry .RequiredPositionalArgs )
337398 assert .ElementsMatch (t , tc .expectedRequiredValues , cfg .entry .RequiredValueArgs )
338399 assert .ElementsMatch (t , tc .expectedRequiredBools , cfg .entry .RequiredBoolArgs )
339400 })
@@ -421,21 +482,22 @@ func TestParseServerEntry(t *testing.T) {
421482 t .Parallel ()
422483
423484 tests := []struct {
424- name string
425- installations map [runtime.Runtime ]packages.Installation
426- supportedRuntimes []runtime.Runtime
427- pkgName string
428- pkgID string
429- availableTools []string
430- requestedTools []string
431- requestedRuntime runtime.Runtime
432- arguments packages.Arguments
433- isErrorExpected bool
434- expectedErrorMessage string
435- expectedPackageValue string
436- expectedRequiredEnvs []string
437- expectedRequiredValues []string
438- expectedRequiredBools []string
485+ name string
486+ installations map [runtime.Runtime ]packages.Installation
487+ supportedRuntimes []runtime.Runtime
488+ pkgName string
489+ pkgID string
490+ availableTools []string
491+ requestedTools []string
492+ requestedRuntime runtime.Runtime
493+ arguments packages.Arguments
494+ isErrorExpected bool
495+ expectedErrorMessage string
496+ expectedPackageValue string
497+ expectedRequiredEnvs []string
498+ expectedRequiredPositionals []string
499+ expectedRequiredValues []string
500+ expectedRequiredBools []string
439501 }{
440502 {
441503 name : "basic server with no arguments" ,
@@ -548,8 +610,9 @@ func TestParseServerEntry(t *testing.T) {
548610 "--format" : {VariableType : packages .VariableTypeArg , Required : true },
549611 "--encoding" : {VariableType : packages .VariableTypeArg , Required : false },
550612 },
551- expectedPackageValue : "uvx::mcp-server-files@latest" ,
552- expectedRequiredValues : []string {"path" , "mode" , "--format" },
613+ expectedPackageValue : "uvx::mcp-server-files@latest" ,
614+ expectedRequiredPositionals : []string {"path" , "mode" },
615+ expectedRequiredValues : []string {"--format" },
553616 },
554617 {
555618 name : "server with only required bool args" ,
@@ -676,12 +739,13 @@ func TestParseServerEntry(t *testing.T) {
676739 } else {
677740 require .NoError (t , err )
678741 expected := config.ServerEntry {
679- Name : tc .pkgID ,
680- Package : tc .expectedPackageValue ,
681- Tools : tc .requestedTools ,
682- RequiredEnvVars : tc .expectedRequiredEnvs ,
683- RequiredValueArgs : tc .expectedRequiredValues ,
684- RequiredBoolArgs : tc .expectedRequiredBools ,
742+ Name : tc .pkgID ,
743+ Package : tc .expectedPackageValue ,
744+ Tools : tc .requestedTools ,
745+ RequiredEnvVars : tc .expectedRequiredEnvs ,
746+ RequiredPositionalArgs : tc .expectedRequiredPositionals ,
747+ RequiredValueArgs : tc .expectedRequiredValues ,
748+ RequiredBoolArgs : tc .expectedRequiredBools ,
685749 }
686750 require .Equal (t , expected .Name , entry .Name )
687751 require .Equal (t , expected .Package , entry .Package )
0 commit comments