package tools import ( "context" "encoding/json" "fmt" "github.com/mark3labs/mcp-go/mcp" "github.com/mark3labs/mcp-go/server" "fwh-toolbox-server/services" ) func RegisterSimCardTools(s *server.MCPServer) { // Tool: 查询单张SIM卡 s.AddTool( mcp.NewTool("query_sim_card", mcp.WithDescription("查询单张 SIM 卡的详细信息,包括状态、平台、用量等"), mcp.WithString("giccid", mcp.Required(), mcp.Description("SIM 卡 GICCID(19位)")), ), handleQuerySimCard, ) // Tool: 搜索SIM卡列表 s.AddTool( mcp.NewTool("search_sim_cards", mcp.WithDescription("搜索 SIM 卡列表,支持按状态和平台过滤"), mcp.WithNumber("page", mcp.Description("页码,从1开始,默认1")), mcp.WithNumber("size", mcp.Description("每页数量,默认10")), mcp.WithString("search", mcp.Description("搜索关键字(GICCID)")), mcp.WithString("status", mcp.Description("状态过滤:UNKNOWN, NOT_ACTIVATED, ACTIVATED, DEACTIVATED, RETIRED(逗号分隔多选)")), mcp.WithString("platform", mcp.Description("平台过滤:SmartHub, Acceleronix(逗号分隔多选)")), ), handleSearchSimCards, ) } func handleQuerySimCard(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { giccid, err := req.RequireString("giccid") if err != nil { return mcp.NewToolResultError("参数 giccid 必填"), nil } data, err := services.GetSimCardInfo(giccid) if err != nil { return mcp.NewToolResultError(fmt.Sprintf("查询失败: %v", err)), nil } jsonBytes, _ := json.MarshalIndent(data, "", " ") return mcp.NewToolResultText(string(jsonBytes)), nil } func handleSearchSimCards(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { page := uint(req.GetFloat("page", 1)) size := uint(req.GetFloat("size", 10)) search := req.GetString("search", "") status := req.GetString("status", "") platform := req.GetString("platform", "") var statusPtr *string if status != "" { statusPtr = &status } var platformPtr *string if platform != "" { platformPtr = &platform } data, err := services.GetSimCardBatchInfo(page, size, search, statusPtr, platformPtr) if err != nil { return mcp.NewToolResultError(fmt.Sprintf("搜索失败: %v", err)), nil } jsonBytes, _ := json.MarshalIndent(data, "", " ") return mcp.NewToolResultText(string(jsonBytes)), nil }