mirror of
https://github.com/alibaba/higress.git
synced 2026-05-08 04:17:27 +08:00
feat(mcp): Get ErrorResponseTemplate from nacos mcp registry (#2650)
This commit is contained in:
@@ -52,11 +52,12 @@ type ServerConfig struct {
|
||||
}
|
||||
|
||||
type McpTool struct {
|
||||
Name string `json:"name,omitempty"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Args []*ToolArgs `json:"args,omitempty"`
|
||||
RequestTemplate *RequestTemplate `json:"requestTemplate"`
|
||||
ResponseTemplate *ResponseTemplate `json:"responseTemplate"`
|
||||
Name string `json:"name,omitempty"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Args []*ToolArgs `json:"args,omitempty"`
|
||||
RequestTemplate *RequestTemplate `json:"requestTemplate"`
|
||||
ResponseTemplate *ResponseTemplate `json:"responseTemplate"`
|
||||
ErrorResponseTemplate string `json:"errorResponseTemplate,omitempty"`
|
||||
}
|
||||
|
||||
type ToolArgs struct {
|
||||
@@ -147,7 +148,8 @@ type ToolsMeta struct {
|
||||
}
|
||||
|
||||
type JsonGoTemplate struct {
|
||||
RequestTemplate RequestTemplate `json:"requestTemplate,omitempty"`
|
||||
ResponseTemplate ResponseTemplate `json:"responseTemplate,omitempty"`
|
||||
ArgsPosition map[string]string `json:"argsPosition,omitempty"`
|
||||
RequestTemplate RequestTemplate `json:"requestTemplate,omitempty"`
|
||||
ResponseTemplate ResponseTemplate `json:"responseTemplate,omitempty"`
|
||||
ArgsPosition map[string]string `json:"argsPosition,omitempty"`
|
||||
ErrorResponseTemplate string `json:"errorResponseTemplate,omitempty"`
|
||||
}
|
||||
|
||||
@@ -471,12 +471,13 @@ func (w *watcher) processToolConfig(dataId, data string, credentials map[string]
|
||||
convertTool.RequestTemplate = requestTemplate
|
||||
}
|
||||
|
||||
responseTemplate, err := getResponseTemplateFromToolMeta(toolMeta)
|
||||
responseTemplate, errorResponseTemplate, err := getResponseTemplateFromToolMeta(toolMeta)
|
||||
if err != nil {
|
||||
mcpServerLog.Errorf("get response template from tool meta error:%v, tool name %v", err, t.Name)
|
||||
continue
|
||||
} else {
|
||||
convertTool.ResponseTemplate = responseTemplate
|
||||
convertTool.ErrorResponseTemplate = errorResponseTemplate
|
||||
}
|
||||
rule.Tools = append(rule.Tools, convertTool)
|
||||
}
|
||||
@@ -715,9 +716,9 @@ func getRequestTemplateFromToolMeta(toolMeta *provider.ToolsMeta) (*provider.Req
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func getResponseTemplateFromToolMeta(toolMeta *provider.ToolsMeta) (*provider.ResponseTemplate, error) {
|
||||
func getResponseTemplateFromToolMeta(toolMeta *provider.ToolsMeta) (*provider.ResponseTemplate, string, error) {
|
||||
if toolMeta == nil {
|
||||
return nil, nil
|
||||
return nil, "", nil
|
||||
}
|
||||
toolTemplate := toolMeta.Templates
|
||||
for kind, meta := range toolTemplate {
|
||||
@@ -725,18 +726,18 @@ func getResponseTemplateFromToolMeta(toolMeta *provider.ToolsMeta) (*provider.Re
|
||||
case provider.JsonGoTemplateType:
|
||||
templateData, err := json.Marshal(meta)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
return nil, "", err
|
||||
}
|
||||
template := &provider.JsonGoTemplate{}
|
||||
if err = json.Unmarshal(templateData, template); err != nil {
|
||||
return nil, err
|
||||
return nil, "", err
|
||||
}
|
||||
return &template.ResponseTemplate, nil
|
||||
return &template.ResponseTemplate, template.ErrorResponseTemplate, nil
|
||||
default:
|
||||
return nil, fmt.Errorf("unsupport tool meta type")
|
||||
return nil, "", fmt.Errorf("unsupported tool meta type: %s", kind)
|
||||
}
|
||||
}
|
||||
return nil, nil
|
||||
return nil, "", nil
|
||||
}
|
||||
|
||||
func mergeMaps(maps ...map[string]string) map[string]string {
|
||||
|
||||
Reference in New Issue
Block a user