diff --git a/registry/mcp_model.go b/registry/mcp_model.go index 43bc8b5e1..3afdfa6c9 100644 --- a/registry/mcp_model.go +++ b/registry/mcp_model.go @@ -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"` } diff --git a/registry/nacos/mcpserver/watcher.go b/registry/nacos/mcpserver/watcher.go index 66d38350c..a49894e51 100644 --- a/registry/nacos/mcpserver/watcher.go +++ b/registry/nacos/mcpserver/watcher.go @@ -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 {