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