package tools import ( "context" "encoding/json" "fmt" "time" "github.com/mark3labs/mcp-go/mcp" "github.com/mark3labs/mcp-go/server" "fwh-toolbox-server/services" ) func RegisterPowerFlowTools(s *server.MCPServer) { s.AddTool( mcp.NewTool("query_power_flow", mcp.WithDescription("查询站点指定日期的功率流数据(PV、Grid、aPower、HomeLoad、Generator)"), mcp.WithString("sn", mcp.Required(), mcp.Description("站点 SN 序列号")), mcp.WithString("date", mcp.Required(), mcp.Description("日期,格式 yyyy-MM-dd")), ), handleQueryPowerFlow, ) } func handleQueryPowerFlow(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { sn, err := req.RequireString("sn") if err != nil { return mcp.NewToolResultError("参数 sn 必填"), nil } dateStr, err := req.RequireString("date") if err != nil { return mcp.NewToolResultError("参数 date 必填"), nil } // 解析日期 day, err := time.Parse("2006-01-02", dateStr) if err != nil { return mcp.NewToolResultError(fmt.Sprintf("日期格式错误,需要 yyyy-MM-dd: %v", err)), nil } data, err := services.QuerySitePowerFlow(sn, day) if err != nil { return mcp.NewToolResultError(fmt.Sprintf("查询功率流失败: %v", err)), nil } jsonBytes, _ := json.MarshalIndent(data, "", " ") return mcp.NewToolResultText(string(jsonBytes)), nil }