File tree Expand file tree Collapse file tree 2 files changed +43
-1
lines changed
Expand file tree Collapse file tree 2 files changed +43
-1
lines changed Original file line number Diff line number Diff line change @@ -3,6 +3,7 @@ package main
33import (
44 "flag"
55 "fmt"
6+ "strings"
67
78 "github.com/sourcegraph/src-cli/internal/mcp"
89)
@@ -47,6 +48,33 @@ func mcpMain(args []string) error {
4748}
4849
4950func handleMcpTool (tool * mcp.ToolDef , args []string ) error {
50- fmt .Printf ("handling tool %q args: %+v" , tool .Name , args )
51+ fs , vars , err := buildArgFlagSet (tool )
52+ if err != nil {
53+ return err
54+ }
55+
56+ if err := fs .Parse (args ); err != nil {
57+ return err
58+ }
59+
60+ inputSchema := tool .InputSchema
61+
62+ for _ , reqName := range inputSchema .Required {
63+ if vars [reqName ] == nil {
64+ return fmt .Errorf ("no value provided for required flag --%s" , reqName )
65+ }
66+ }
67+
68+ if len (args ) < len (inputSchema .Required ) {
69+ return fmt .Errorf ("not enough arguments provided - the following flags are required:\n %s" , strings .Join (inputSchema .Required , "\n " ))
70+ }
71+
72+ derefFlagValues (vars )
73+
74+ fmt .Println ("Flags" )
75+ for name , val := range vars {
76+ fmt .Printf ("--%s=%v\n " , name , val )
77+ }
78+
5179 return nil
5280}
Original file line number Diff line number Diff line change @@ -3,6 +3,7 @@ package main
33import (
44 "flag"
55 "fmt"
6+ "reflect"
67 "strings"
78)
89
@@ -21,6 +22,19 @@ func (s *strSliceFlag) String() string {
2122 return strings .Join (s .vals , "," )
2223}
2324
25+ func derefFlagValues (vars map [string ]any ) {
26+ for k , v := range vars {
27+ rfl := reflect .ValueOf (v )
28+ if rfl .Kind () == reflect .Pointer {
29+ vv := rfl .Elem ().Interface ()
30+ if slice , ok := vv .(strSliceFlag ); ok {
31+ vv = slice .vals
32+ }
33+ vars [k ] = vv
34+ }
35+ }
36+ }
37+
2438func buildArgFlagSet (tool * MCPToolDef ) (* flag.FlagSet , map [string ]any , error ) {
2539 fs := flag .NewFlagSet (tool .Name (), flag .ContinueOnError )
2640 flagVars := map [string ]any {}
You can’t perform that action at this time.
0 commit comments