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