@@ -51,13 +51,14 @@ var _ compatibleSource = &bigtabledb.Source{}
5151var compatibleSources = [... ]string {bigtabledb .SourceKind }
5252
5353type Config struct {
54- Name string `yaml:"name" validate:"required"`
55- Kind string `yaml:"kind" validate:"required"`
56- Source string `yaml:"source" validate:"required"`
57- Description string `yaml:"description" validate:"required"`
58- Statement string `yaml:"statement" validate:"required"`
59- AuthRequired []string `yaml:"authRequired"`
60- Parameters tools.Parameters `yaml:"parameters"`
54+ Name string `yaml:"name" validate:"required"`
55+ Kind string `yaml:"kind" validate:"required"`
56+ Source string `yaml:"source" validate:"required"`
57+ Description string `yaml:"description" validate:"required"`
58+ Statement string `yaml:"statement" validate:"required"`
59+ AuthRequired []string `yaml:"authRequired"`
60+ Parameters tools.Parameters `yaml:"parameters"`
61+ TemplateParameters tools.Parameters `yaml:"templateParameters"`
6162}
6263
6364// validate interface
@@ -80,22 +81,26 @@ func (cfg Config) Initialize(srcs map[string]sources.Source) (tools.Tool, error)
8081 return nil , fmt .Errorf ("invalid source for %q tool: source kind must be one of %q" , kind , compatibleSources )
8182 }
8283
84+ allParameters , paramManifest , paramMcpManifest := tools .ProcessParameters (cfg .TemplateParameters , cfg .Parameters )
85+
8386 mcpManifest := tools.McpManifest {
8487 Name : cfg .Name ,
8588 Description : cfg .Description ,
86- InputSchema : cfg . Parameters . McpManifest () ,
89+ InputSchema : paramMcpManifest ,
8790 }
8891
8992 // finish tool setup
9093 t := Tool {
91- Name : cfg .Name ,
92- Kind : kind ,
93- Parameters : cfg .Parameters ,
94- Statement : cfg .Statement ,
95- AuthRequired : cfg .AuthRequired ,
96- Client : s .BigtableClient (),
97- manifest : tools.Manifest {Description : cfg .Description , Parameters : cfg .Parameters .Manifest (), AuthRequired : cfg .AuthRequired },
98- mcpManifest : mcpManifest ,
94+ Name : cfg .Name ,
95+ Kind : kind ,
96+ Parameters : cfg .Parameters ,
97+ TemplateParameters : cfg .TemplateParameters ,
98+ AllParams : allParameters ,
99+ Statement : cfg .Statement ,
100+ AuthRequired : cfg .AuthRequired ,
101+ Client : s .BigtableClient (),
102+ manifest : tools.Manifest {Description : cfg .Description , Parameters : paramManifest , AuthRequired : cfg .AuthRequired },
103+ mcpManifest : mcpManifest ,
99104 }
100105 return t , nil
101106}
@@ -104,10 +109,12 @@ func (cfg Config) Initialize(srcs map[string]sources.Source) (tools.Tool, error)
104109var _ tools.Tool = Tool {}
105110
106111type Tool struct {
107- Name string `yaml:"name"`
108- Kind string `yaml:"kind"`
109- AuthRequired []string `yaml:"authRequired"`
110- Parameters tools.Parameters `yaml:"parameters"`
112+ Name string `yaml:"name"`
113+ Kind string `yaml:"kind"`
114+ AuthRequired []string `yaml:"authRequired"`
115+ Parameters tools.Parameters `yaml:"parameters"`
116+ TemplateParameters tools.Parameters `yaml:"templateParameters"`
117+ AllParams tools.Parameters `yaml:"allParams"`
111118
112119 Client * bigtable.Client
113120 Statement string
@@ -141,21 +148,32 @@ func getMapParamsType(tparams tools.Parameters, params tools.ParamValues) (map[s
141148}
142149
143150func (t Tool ) Invoke (ctx context.Context , params tools.ParamValues ) ([]any , error ) {
144- mapParamsType , err := getMapParamsType (t .Parameters , params )
151+ paramsMap := params .AsMap ()
152+ newStatement , err := tools .ResolveTemplateParams (t .TemplateParameters , t .Statement , paramsMap )
153+ if err != nil {
154+ return nil , fmt .Errorf ("unable to extract template params %w" , err )
155+ }
156+
157+ newParams , err := tools .GetParams (t .Parameters , paramsMap )
158+ if err != nil {
159+ return nil , fmt .Errorf ("unable to extract standard params %w" , err )
160+ }
161+
162+ mapParamsType , err := getMapParamsType (t .Parameters , newParams )
145163 if err != nil {
146164 return nil , fmt .Errorf ("fail to get map params: %w" , err )
147165 }
148166
149167 ps , err := t .Client .PrepareStatement (
150168 ctx ,
151- t . Statement ,
169+ newStatement ,
152170 mapParamsType ,
153171 )
154172 if err != nil {
155173 return nil , fmt .Errorf ("unable to prepare statement: %w" , err )
156174 }
157175
158- bs , err := ps .Bind (params .AsMap ())
176+ bs , err := ps .Bind (newParams .AsMap ())
159177 if err != nil {
160178 return nil , fmt .Errorf ("unable to bind: %w" , err )
161179 }
@@ -183,7 +201,7 @@ func (t Tool) Invoke(ctx context.Context, params tools.ParamValues) ([]any, erro
183201}
184202
185203func (t Tool ) ParseParams (data map [string ]any , claims map [string ]map [string ]any ) (tools.ParamValues , error ) {
186- return tools .ParseParams (t .Parameters , data , claims )
204+ return tools .ParseParams (t .AllParams , data , claims )
187205}
188206
189207func (t Tool ) Manifest () tools.Manifest {
0 commit comments