package tools import ( "context" "encoding/json" "fmt" "github.com/mark3labs/mcp-go/mcp" "github.com/mark3labs/mcp-go/server" "fwh-toolbox-server/dto" "fwh-toolbox-server/services" ) func RegisterPlaneTools(s *server.MCPServer) { // Tool: 创建反馈 s.AddTool( mcp.NewTool("create_feedback", mcp.WithDescription("在 Plane 创建 Intake Issue(问题反馈或需求提交)"), mcp.WithString("title", mcp.Required(), mcp.Description("标题")), mcp.WithString("type", mcp.Required(), mcp.Description("类型:bug 或 feature")), mcp.WithString("priority", mcp.Description("优先级:urgent, high, medium, low, none(默认 medium)")), mcp.WithString("description", mcp.Description("详细描述")), mcp.WithString("category", mcp.Description("分类:bug类(bug,ui,performance,other) / feature类(new,improvement,experience)")), ), handleCreateFeedback, ) // Tool: 查询反馈历史 s.AddTool( mcp.NewTool("query_feedback_history", mcp.WithDescription("查询 Plane Intake Issue 提交历史(带 Feedback 标签的记录)"), ), handleQueryFeedbackHistory, ) } func handleCreateFeedback(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { title, err := req.RequireString("title") if err != nil { return mcp.NewToolResultError("参数 title 必填"), nil } feedbackType, err := req.RequireString("type") if err != nil { return mcp.NewToolResultError("参数 type 必填"), nil } if feedbackType != "bug" && feedbackType != "feature" { return mcp.NewToolResultError("type 必须是 bug 或 feature"), nil } priority := req.GetString("priority", "medium") description := req.GetString("description", "") category := req.GetString("category", "") body := dto.FeedbackSubmitDTO{ Title: title, Type: feedbackType, Priority: priority, Description: description, Category: category, } result, err := services.SubmitFeedback(body, "MCP-Agent") if err != nil { return mcp.NewToolResultError(fmt.Sprintf("创建失败: %v", err)), nil } jsonBytes, _ := json.MarshalIndent(result, "", " ") return mcp.NewToolResultText(string(jsonBytes)), nil } func handleQueryFeedbackHistory(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { data, err := services.GetFeedbackHistory("") if err != nil { return mcp.NewToolResultError(fmt.Sprintf("查询失败: %v", err)), nil } jsonBytes, _ := json.MarshalIndent(data, "", " ") return mcp.NewToolResultText(string(jsonBytes)), nil }