siteInfo.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package tools
  2. import (
  3. "context"
  4. "encoding/json"
  5. "fmt"
  6. "github.com/mark3labs/mcp-go/mcp"
  7. "github.com/mark3labs/mcp-go/server"
  8. "fwh-toolbox-server/dto"
  9. "fwh-toolbox-server/services"
  10. )
  11. func RegisterSiteInfoTools(s *server.MCPServer) {
  12. // Tool: 查询站点信息
  13. s.AddTool(
  14. mcp.NewTool("query_site_info",
  15. mcp.WithDescription("查询单个站点设备的详细信息,包括版本、网络状态、激活状态、固件、SN 等"),
  16. mcp.WithString("sn", mcp.Required(), mcp.Description("站点 SN 序列号")),
  17. ),
  18. handleQuerySiteInfo,
  19. )
  20. // Tool: 搜索站点列表
  21. s.AddTool(
  22. mcp.NewTool("search_sites",
  23. mcp.WithDescription("搜索站点设备列表,支持分页和关键字搜索"),
  24. mcp.WithNumber("page", mcp.Description("页码,从1开始,默认1")),
  25. mcp.WithNumber("size", mcp.Description("每页数量,默认10")),
  26. mcp.WithString("keyword", mcp.Description("搜索关键字(匹配 SN、设备名)")),
  27. ),
  28. handleSearchSites,
  29. )
  30. }
  31. func handleQuerySiteInfo(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  32. sn, err := req.RequireString("sn")
  33. if err != nil {
  34. return mcp.NewToolResultError("参数 sn 必填"), nil
  35. }
  36. data, err := services.GetSiteInfoData(sn)
  37. if err != nil {
  38. return mcp.NewToolResultError(fmt.Sprintf("查询失败: %v", err)), nil
  39. }
  40. jsonBytes, _ := json.MarshalIndent(data, "", " ")
  41. return mcp.NewToolResultText(string(jsonBytes)), nil
  42. }
  43. func handleSearchSites(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  44. page := uint(req.GetFloat("page", 1))
  45. size := uint(req.GetFloat("size", 10))
  46. keyword := req.GetString("keyword", "")
  47. param := dto.SiteInfoRequest{
  48. PageNum: page,
  49. PageSize: size,
  50. Search: keyword,
  51. }
  52. data, err := services.QuerySiteInfoDataList(param)
  53. if err != nil {
  54. return mcp.NewToolResultError(fmt.Sprintf("搜索失败: %v", err)), nil
  55. }
  56. jsonBytes, _ := json.MarshalIndent(data, "", " ")
  57. return mcp.NewToolResultText(string(jsonBytes)), nil
  58. }