| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- 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
- }
|