feat(mcp): Get ErrorResponseTemplate from nacos mcp registry (#2650)

This commit is contained in:
shaoyin.zj
2025-07-30 21:18:37 +08:00
committed by GitHub
parent 27680223b9
commit bd1101d711
2 changed files with 19 additions and 16 deletions

View File

@@ -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"`
} }

View File

@@ -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 {