package tools import ( "context" "encoding/json" "fmt" "github.com/mark3labs/mcp-go/mcp" "github.com/mark3labs/mcp-go/server" "fwh-toolbox-server/dto" "fwh-toolbox-server/services" ) func RegisterSiteInfoTools(s *server.MCPServer) { // Tool: 查询站点信息 s.AddTool( mcp.NewTool("query_site_info", mcp.WithDescription("查询单个站点设备的详细信息,包括版本、网络状态、激活状态、固件、SN 等"), mcp.WithString("sn", mcp.Required(), mcp.Description("站点 SN 序列号")), ), handleQuerySiteInfo, ) // Tool: 搜索站点列表 s.AddTool( mcp.NewTool("search_sites", mcp.WithDescription("搜索站点设备列表,支持分页和关键字搜索"), mcp.WithNumber("page", mcp.Description("页码,从1开始,默认1")), mcp.WithNumber("size", mcp.Description("每页数量,默认10")), mcp.WithString("keyword", mcp.Description("搜索关键字(匹配 SN、设备名)")), ), handleSearchSites, ) } func handleQuerySiteInfo(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { sn, err := req.RequireString("sn") if err != nil { return mcp.NewToolResultError("参数 sn 必填"), nil } data, err := services.GetSiteInfoData(sn) if err != nil { return mcp.NewToolResultError(fmt.Sprintf("查询失败: %v", err)), nil } jsonBytes, _ := json.MarshalIndent(data, "", " ") return mcp.NewToolResultText(string(jsonBytes)), nil } func handleSearchSites(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) { page := uint(req.GetFloat("page", 1)) size := uint(req.GetFloat("size", 10)) keyword := req.GetString("keyword", "") param := dto.SiteInfoRequest{ PageNum: page, PageSize: size, Search: keyword, } data, err := services.QuerySiteInfoDataList(param) if err != nil { return mcp.NewToolResultError(fmt.Sprintf("搜索失败: %v", err)), nil } jsonBytes, _ := json.MarshalIndent(data, "", " ") return mcp.NewToolResultText(string(jsonBytes)), nil }