| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- 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
- }
|