mirror of
https://github.com/alibaba/higress.git
synced 2026-05-28 14:47:29 +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 {
|
type McpTool struct {
|
||||||
Name string `json:"name,omitempty"`
|
Name string `json:"name,omitempty"`
|
||||||
Description string `json:"description,omitempty"`
|
Description string `json:"description,omitempty"`
|
||||||
Args []*ToolArgs `json:"args,omitempty"`
|
Args []*ToolArgs `json:"args,omitempty"`
|
||||||
RequestTemplate *RequestTemplate `json:"requestTemplate"`
|
RequestTemplate *RequestTemplate `json:"requestTemplate"`
|
||||||
ResponseTemplate *ResponseTemplate `json:"responseTemplate"`
|
ResponseTemplate *ResponseTemplate `json:"responseTemplate"`
|
||||||
|
ErrorResponseTemplate string `json:"errorResponseTemplate,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ToolArgs struct {
|
type ToolArgs struct {
|
||||||
@@ -147,7 +148,8 @@ type ToolsMeta struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type JsonGoTemplate struct {
|
type JsonGoTemplate struct {
|
||||||
RequestTemplate RequestTemplate `json:"requestTemplate,omitempty"`
|
RequestTemplate RequestTemplate `json:"requestTemplate,omitempty"`
|
||||||
ResponseTemplate ResponseTemplate `json:"responseTemplate,omitempty"`
|
ResponseTemplate ResponseTemplate `json:"responseTemplate,omitempty"`
|
||||||
ArgsPosition map[string]string `json:"argsPosition,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
|
convertTool.RequestTemplate = requestTemplate
|
||||||
}
|
}
|
||||||
|
|
||||||
responseTemplate, err := getResponseTemplateFromToolMeta(toolMeta)
|
responseTemplate, errorResponseTemplate, err := getResponseTemplateFromToolMeta(toolMeta)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
mcpServerLog.Errorf("get response template from tool meta error:%v, tool name %v", err, t.Name)
|
mcpServerLog.Errorf("get response template from tool meta error:%v, tool name %v", err, t.Name)
|
||||||
continue
|
continue
|
||||||
} else {
|
} else {
|
||||||
convertTool.ResponseTemplate = responseTemplate
|
convertTool.ResponseTemplate = responseTemplate
|
||||||
|
convertTool.ErrorResponseTemplate = errorResponseTemplate
|
||||||
}
|
}
|
||||||
rule.Tools = append(rule.Tools, convertTool)
|
rule.Tools = append(rule.Tools, convertTool)
|
||||||
}
|
}
|
||||||
@@ -715,9 +716,9 @@ func getRequestTemplateFromToolMeta(toolMeta *provider.ToolsMeta) (*provider.Req
|
|||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getResponseTemplateFromToolMeta(toolMeta *provider.ToolsMeta) (*provider.ResponseTemplate, error) {
|
func getResponseTemplateFromToolMeta(toolMeta *provider.ToolsMeta) (*provider.ResponseTemplate, string, error) {
|
||||||
if toolMeta == nil {
|
if toolMeta == nil {
|
||||||
return nil, nil
|
return nil, "", nil
|
||||||
}
|
}
|
||||||
toolTemplate := toolMeta.Templates
|
toolTemplate := toolMeta.Templates
|
||||||
for kind, meta := range toolTemplate {
|
for kind, meta := range toolTemplate {
|
||||||
@@ -725,18 +726,18 @@ func getResponseTemplateFromToolMeta(toolMeta *provider.ToolsMeta) (*provider.Re
|
|||||||
case provider.JsonGoTemplateType:
|
case provider.JsonGoTemplateType:
|
||||||
templateData, err := json.Marshal(meta)
|
templateData, err := json.Marshal(meta)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, "", err
|
||||||
}
|
}
|
||||||
template := &provider.JsonGoTemplate{}
|
template := &provider.JsonGoTemplate{}
|
||||||
if err = json.Unmarshal(templateData, template); err != nil {
|
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:
|
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 {
|
func mergeMaps(maps ...map[string]string) map[string]string {
|
||||||
|
|||||||
Reference in New Issue
Block a user