simCard.go 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  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/services"
  9. )
  10. func RegisterSimCardTools(s *server.MCPServer) {
  11. // Tool: 查询单张SIM卡
  12. s.AddTool(
  13. mcp.NewTool("query_sim_card",
  14. mcp.WithDescription("查询单张 SIM 卡的详细信息,包括状态、平台、用量等"),
  15. mcp.WithString("giccid", mcp.Required(), mcp.Description("SIM 卡 GICCID(19位)")),
  16. ),
  17. handleQuerySimCard,
  18. )
  19. // Tool: 搜索SIM卡列表
  20. s.AddTool(
  21. mcp.NewTool("search_sim_cards",
  22. mcp.WithDescription("搜索 SIM 卡列表,支持按状态和平台过滤"),
  23. mcp.WithNumber("page", mcp.Description("页码,从1开始,默认1")),
  24. mcp.WithNumber("size", mcp.Description("每页数量,默认10")),
  25. mcp.WithString("search", mcp.Description("搜索关键字(GICCID)")),
  26. mcp.WithString("status", mcp.Description("状态过滤:UNKNOWN, NOT_ACTIVATED, ACTIVATED, DEACTIVATED, RETIRED(逗号分隔多选)")),
  27. mcp.WithString("platform", mcp.Description("平台过滤:SmartHub, Acceleronix(逗号分隔多选)")),
  28. ),
  29. handleSearchSimCards,
  30. )
  31. }
  32. func handleQuerySimCard(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  33. giccid, err := req.RequireString("giccid")
  34. if err != nil {
  35. return mcp.NewToolResultError("参数 giccid 必填"), nil
  36. }
  37. data, err := services.GetSimCardInfo(giccid)
  38. if err != nil {
  39. return mcp.NewToolResultError(fmt.Sprintf("查询失败: %v", err)), nil
  40. }
  41. jsonBytes, _ := json.MarshalIndent(data, "", " ")
  42. return mcp.NewToolResultText(string(jsonBytes)), nil
  43. }
  44. func handleSearchSimCards(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
  45. page := uint(req.GetFloat("page", 1))
  46. size := uint(req.GetFloat("size", 10))
  47. search := req.GetString("search", "")
  48. status := req.GetString("status", "")
  49. platform := req.GetString("platform", "")
  50. var statusPtr *string
  51. if status != "" {
  52. statusPtr = &status
  53. }
  54. var platformPtr *string
  55. if platform != "" {
  56. platformPtr = &platform
  57. }
  58. data, err := services.GetSimCardBatchInfo(page, size, search, statusPtr, platformPtr)
  59. if err != nil {
  60. return mcp.NewToolResultError(fmt.Sprintf("搜索失败: %v", err)), nil
  61. }
  62. jsonBytes, _ := json.MarshalIndent(data, "", " ")
  63. return mcp.NewToolResultText(string(jsonBytes)), nil
  64. }