| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- package service
- import (
- "context"
- "encoding/json"
- "github.com/mark3labs/mcp-go/mcp"
- "github.com/mark3labs/mcp-go/server"
- "fwh-toolbox-server/cmd/mcp/tools/helper"
- "fwh-toolbox-server/dto"
- "fwh-toolbox-server/services"
- )
- func registerSiteInfoTools(s *server.MCPServer) {
- s.AddTool(
- mcp.NewTool("service_site_info_update_status",
- mcp.WithDescription("查询站点信息表的更新状态(最近一次更新时间和结果)"),
- ),
- handleSiteInfoUpdateStatus,
- )
- s.AddTool(
- mcp.NewTool("service_site_info_trigger_update",
- mcp.WithDescription("触发站点信息表更新任务(从 FWH Pro 同步最新数据)[写操作]"),
- ),
- handleSiteInfoTriggerUpdate,
- )
- s.AddTool(
- mcp.NewTool("service_site_info_tags_list",
- mcp.WithDescription("查询站点标签列表"),
- mcp.WithNumber("page", mcp.Description("页码,从1开始,默认1")),
- mcp.WithNumber("size", mcp.Description("每页数量,默认10")),
- mcp.WithString("search", mcp.Description("搜索关键字")),
- ),
- handleSiteInfoTagsList,
- )
- s.AddTool(
- mcp.NewTool("service_site_info_tag_update",
- mcp.WithDescription("创建或更新站点标签 [写操作]"),
- mcp.WithString("tag", mcp.Required(), mcp.Description("标签数据,JSON格式,包含 id(可选)、name、color、description 字段")),
- ),
- handleSiteInfoTagUpdate,
- )
- }
- func handleSiteInfoUpdateStatus(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
- data, err := services.GetSiteInfoUpdateStatus()
- if err != nil {
- return helper.ServiceError("查询更新状态", err), nil
- }
- return helper.JSONResultOrFileAuto(data), nil
- }
- func handleSiteInfoTriggerUpdate(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
- if err := services.UpdateSiteInfoDate(); err != nil {
- return helper.ServiceError("触发站点信息更新", err), nil
- }
- return helper.TextResult("已触发站点信息更新任务"), nil
- }
- func handleSiteInfoTagsList(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", "")
- data, err := services.GetSiteInfoTags(page, size, search)
- if err != nil {
- return helper.ServiceError("查询标签列表", err), nil
- }
- return helper.PageResult(data.Total, data.PageSize, data.PageNum, data.Data, "site_info_tags"), nil
- }
- func handleSiteInfoTagUpdate(ctx context.Context, req mcp.CallToolRequest) (*mcp.CallToolResult, error) {
- tagStr, err := req.RequireString("tag")
- if err != nil {
- return helper.ParamError("tag"), nil
- }
- var tag dto.SiteTagDTO
- if err := json.Unmarshal([]byte(tagStr), &tag); err != nil {
- return helper.ParamInvalidError("tag", "需要有效的JSON格式"), nil
- }
- if err := services.UpdateSiteInfoTag(tag); err != nil {
- return helper.ServiceError("更新标签", err), nil
- }
- return helper.TextResult("标签更新成功"), nil
- }
|