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)
@@ -38,6 +39,33 @@ func mcpMain(args []string) error {
3839}
3940
4041func handleMcpTool (tool * mcp.MCPToolDef , args []string ) error {
41- fmt .Printf ("handling tool %q args: %+v" , tool .Name , args )
42+ fs , vars , err := buildArgFlagSet (tool )
43+ if err != nil {
44+ return err
45+ }
46+
47+ if err := fs .Parse (args ); err != nil {
48+ return err
49+ }
50+
51+ inputSchema := tool .InputSchema
52+
53+ for _ , reqName := range inputSchema .Required {
54+ if vars [reqName ] == nil {
55+ return fmt .Errorf ("no value provided for required flag --%s" , reqName )
56+ }
57+ }
58+
59+ if len (args ) < len (inputSchema .Required ) {
60+ return fmt .Errorf ("not enough arguments provided - the following flags are required:\n %s" , strings .Join (inputSchema .Required , "\n " ))
61+ }
62+
63+ derefFlagValues (vars )
64+
65+ fmt .Println ("Flags" )
66+ for name , val := range vars {
67+ fmt .Printf ("--%s=%v\n " , name , val )
68+ }
69+
4270 return nil
4371}
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