powerFlow.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package tools
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "time"
  7. "github.com/mark3labs/mcp-go/mcp"
  8. "github.com/mark3labs/mcp-go/server"
  9. "fwh-toolbox-server/services"
  10. )
  11. func RegisterPowerFlowTools(s *server.MCPServer) {
  12. s.AddTool(
  13. mcp.NewTool("query_power_flow",
  14. mcp.WithDescription("查询站点指定日期的功率流数据(PV、Grid、aPower、HomeLoad、Generator)"),
  15. mcp.WithString("sn", mcp.Required(), mcp.Description("站点 SN 序列号")),
  16. mcp.WithString("date", mcp.Required(), mcp.Description("日期,格式 yyyy-MM-dd")),
  17. ),
  18. handleQueryPowerFlow,
  19. )
  20. }
  21. func handleQueryPowerFlow(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  22. sn, err := req.RequireString("sn")
  23. if err != nil {
  24. return mcp.NewToolResultError("参数 sn 必填"), nil
  25. }
  26. dateStr, err := req.RequireString("date")
  27. if err != nil {
  28. return mcp.NewToolResultError("参数 date 必填"), nil
  29. }
  30. // 解析日期
  31. day, err := time.Parse("2006-01-02", dateStr)
  32. if err != nil {
  33. return mcp.NewToolResultError(fmt.Sprintf("日期格式错误,需要 yyyy-MM-dd: %v", err)), nil
  34. }
  35. data, err := services.QuerySitePowerFlow(sn, day)
  36. if err != nil {
  37. return mcp.NewToolResultError(fmt.Sprintf("查询功率流失败: %v", err)), nil
  38. }
  39. jsonBytes, _ := json.MarshalIndent(data, "", " ")
  40. return mcp.NewToolResultText(string(jsonBytes)), nil
  41. }