package data import ( "context" "fmt" "strings" "github.com/mark3labs/mcp-go/mcp" "github.com/mark3labs/mcp-go/server" "fwh-toolbox-server/cmd/mcp/tools/helper" "fwh-toolbox-server/repositories" ) func registerSimApiTools(s *server.MCPServer) { // SmartHub s.AddTool( mcp.NewTool("data_sim_smarthub_batch_info", mcp.WithDescription("批量查询 SmartHub 平台 SIM 卡信息"), mcp.WithNumber("page", mcp.Description("页码,默认1")), mcp.WithNumber("size", mcp.Description("每页数量,默认20")), ), handleSimSmartHubBatchInfo, ) s.AddTool( mcp.NewTool("data_sim_smarthub_card_info", mcp.WithDescription("查询 SmartHub 平台单张 SIM 卡详细信息"), mcp.WithString("giccid", mcp.Required(), mcp.Description("SIM 卡 GICCID")), ), handleSimSmartHubCardInfo, ) // Acceleronix s.AddTool( mcp.NewTool("data_sim_acceleronix_card_list", mcp.WithDescription("查询 Acceleronix 平台 SIM 卡列表"), mcp.WithNumber("page", mcp.Description("页码,默认1")), mcp.WithNumber("size", mcp.Description("每页数量,默认20")), ), handleSimAcceleronixCardList, ) s.AddTool( mcp.NewTool("data_sim_acceleronix_card_info", mcp.WithDescription("查询 Acceleronix 平台单张 SIM 卡详情"), mcp.WithString("iccid", mcp.Required(), mcp.Description("SIM 卡 ICCID")), ), handleSimAcceleronixCardInfo, ) s.AddTool( mcp.NewTool("data_sim_acceleronix_batch_data_info", mcp.WithDescription("批量获取 Acceleronix SIM 卡数据用量信息"), mcp.WithString("iccid_list", mcp.Required(), mcp.Description("ICCID 列表,逗号分隔")), mcp.WithString("month", mcp.Required(), mcp.Description("月份,格式 YYYYMM(如 202601)")), ), handleSimAcceleronixBatchDataInfo, ) s.AddTool( mcp.NewTool("data_sim_acceleronix_data_pool_list", mcp.WithDescription("查询 Acceleronix 流量池列表"), mcp.WithNumber("page", mcp.Description("页码,默认1")), mcp.WithNumber("size", mcp.Description("每页数量,默认20")), ), handleSimAcceleronixDataPoolList, ) s.AddTool( mcp.NewTool("data_sim_acceleronix_data_pool_sim_info", mcp.WithDescription("查询 Acceleronix 流量池中的 SIM 卡详情"), mcp.WithString("data_pool_id", mcp.Required(), mcp.Description("流量池ID")), mcp.WithNumber("page", mcp.Description("页码,默认1")), mcp.WithNumber("size", mcp.Description("每页数量,默认20")), ), handleSimAcceleronixDataPoolSimInfo, ) } // === Handlers === func handleSimSmartHubBatchInfo(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { page := uint(req.GetFloat("page", 1)) size := uint(req.GetFloat("size", 20)) data, err := repositories.QuerySmartHubBatchSimCardInfo(page, size) if err != nil { return helper.ServiceError("查询SmartHub SIM卡列表", err), nil } return helper.JSONResult(data), nil } func handleSimSmartHubCardInfo(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { giccid, err := req.RequireString("giccid") if err != nil { return helper.ParamError("giccid"), nil } data, err := repositories.QuerySmartHubSimCardInfo(giccid) if err != nil { return helper.ServiceError("查询SmartHub SIM卡详情", err), nil } return helper.JSONResult(data), nil } func handleSimAcceleronixCardList(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { page := uint(req.GetFloat("page", 1)) size := uint(req.GetFloat("size", 20)) data, err := repositories.QueryAcceleronixSimCardList(page, size) if err != nil { return helper.ServiceError("查询Acceleronix SIM卡列表", err), nil } return helper.JSONResult(data), nil } func handleSimAcceleronixCardInfo(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { iccid, err := req.RequireString("iccid") if err != nil { return helper.ParamError("iccid"), nil } data, err := repositories.QueryAcceleronixSimCardInfo(iccid) if err != nil { return helper.ServiceError("查询Acceleronix SIM卡详情", err), nil } return helper.JSONResult(data), nil } func handleSimAcceleronixBatchDataInfo(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { iccidListStr, err := req.RequireString("iccid_list") if err != nil { return helper.ParamError("iccid_list"), nil } month, err := req.RequireString("month") if err != nil { return helper.ParamError("month"), nil } // 验证月份格式 if len(month) != 6 { return helper.ParamInvalidError("month", "需要 YYYYMM 格式,如 202601"), nil } iccidList := strings.Split(iccidListStr, ",") for i := range iccidList { iccidList[i] = strings.TrimSpace(iccidList[i]) } if len(iccidList) == 0 { return helper.ParamInvalidError("iccid_list", "至少需要一个ICCID"), nil } if len(iccidList) > 50 { return helper.ParamInvalidError("iccid_list", fmt.Sprintf("最多50个ICCID,当前%d个", len(iccidList))), nil } data, err := repositories.QueryAcceleronixBatchSimCardDataInfo(iccidList, month) if err != nil { return helper.ServiceError("批量查询Acceleronix数据用量", err), nil } return helper.JSONResult(data), nil } func handleSimAcceleronixDataPoolList(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { page := uint(req.GetFloat("page", 1)) size := uint(req.GetFloat("size", 20)) data, err := repositories.QueryAcceleronixDataPoolList(page, size) if err != nil { return helper.ServiceError("查询Acceleronix流量池列表", err), nil } return helper.JSONResult(data), nil } func handleSimAcceleronixDataPoolSimInfo(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { poolID, err := req.RequireString("data_pool_id") if err != nil { return helper.ParamError("data_pool_id"), nil } page := uint(req.GetFloat("page", 1)) size := uint(req.GetFloat("size", 20)) data, err := repositories.QueryAcceleronixDataPoolSimInfo(poolID, page, size) if err != nil { return helper.ServiceError("查询流量池SIM详情", err), nil } return helper.JSONResult(data), nil }