site_info.go 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package service
  2. import (
  3. "context"
  4. "encoding/json"
  5. "github.com/mark3labs/mcp-go/mcp"
  6. "github.com/mark3labs/mcp-go/server"
  7. "fwh-toolbox-server/cmd/mcp/tools/helper"
  8. "fwh-toolbox-server/dto"
  9. "fwh-toolbox-server/services"
  10. )
  11. func registerSiteInfoTools(s *server.MCPServer) {
  12. s.AddTool(
  13. mcp.NewTool("service_site_info_update_status",
  14. mcp.WithDescription("查询站点信息表的更新状态(最近一次更新时间和结果)"),
  15. ),
  16. handleSiteInfoUpdateStatus,
  17. )
  18. s.AddTool(
  19. mcp.NewTool("service_site_info_trigger_update",
  20. mcp.WithDescription("触发站点信息表更新任务(从 FWH Pro 同步最新数据)[写操作]"),
  21. ),
  22. handleSiteInfoTriggerUpdate,
  23. )
  24. s.AddTool(
  25. mcp.NewTool("service_site_info_tags_list",
  26. mcp.WithDescription("查询站点标签列表"),
  27. mcp.WithNumber("page", mcp.Description("页码,从1开始,默认1")),
  28. mcp.WithNumber("size", mcp.Description("每页数量,默认10")),
  29. mcp.WithString("search", mcp.Description("搜索关键字")),
  30. ),
  31. handleSiteInfoTagsList,
  32. )
  33. s.AddTool(
  34. mcp.NewTool("service_site_info_tag_update",
  35. mcp.WithDescription("创建或更新站点标签 [写操作]"),
  36. mcp.WithString("tag", mcp.Required(), mcp.Description("标签数据,JSON格式,包含 id(可选)、name、color、description 字段")),
  37. ),
  38. handleSiteInfoTagUpdate,
  39. )
  40. }
  41. func handleSiteInfoUpdateStatus(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  42. data, err := services.GetSiteInfoUpdateStatus()
  43. if err != nil {
  44. return helper.ServiceError("查询更新状态", err), nil
  45. }
  46. return helper.JSONResultOrFileAuto(data), nil
  47. }
  48. func handleSiteInfoTriggerUpdate(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  49. if err := services.UpdateSiteInfoDate(); err != nil {
  50. return helper.ServiceError("触发站点信息更新", err), nil
  51. }
  52. return helper.TextResult("已触发站点信息更新任务"), nil
  53. }
  54. func handleSiteInfoTagsList(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  55. page := uint(req.GetFloat("page", 1))
  56. size := uint(req.GetFloat("size", 10))
  57. search := req.GetString("search", "")
  58. data, err := services.GetSiteInfoTags(page, size, search)
  59. if err != nil {
  60. return helper.ServiceError("查询标签列表", err), nil
  61. }
  62. return helper.PageResult(data.Total, data.PageSize, data.PageNum, data.Data, "site_info_tags"), nil
  63. }
  64. func handleSiteInfoTagUpdate(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  65. tagStr, err := req.RequireString("tag")
  66. if err != nil {
  67. return helper.ParamError("tag"), nil
  68. }
  69. var tag dto.SiteTagDTO
  70. if err := json.Unmarshal([]byte(tagStr), &tag); err != nil {
  71. return helper.ParamInvalidError("tag", "需要有效的JSON格式"), nil
  72. }
  73. if err := services.UpdateSiteInfoTag(tag); err != nil {
  74. return helper.ServiceError("更新标签", err), nil
  75. }
  76. return helper.TextResult("标签更新成功"), nil
  77. }