From 1e3c968277dcb89420671b2dd90a8bf97c93db38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?piexlMax=28=E5=A5=87=E6=B7=BC?= Date: Mon, 11 Aug 2025 10:52:15 +0800 Subject: [PATCH] =?UTF-8?q?refactor(mcp):=20=E6=9B=B4=E6=96=B0=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=80=BC=E6=8F=8F=E8=BF=B0=E5=B9=B6=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E6=97=A0=E7=94=A8=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/mcp/current_time.go | 81 --------------------------------- server/mcp/get_nickname.go | 79 -------------------------------- server/mcp/gva_auto_generate.go | 2 +- 3 files changed, 1 insertion(+), 161 deletions(-) delete mode 100644 server/mcp/current_time.go delete mode 100644 server/mcp/get_nickname.go diff --git a/server/mcp/current_time.go b/server/mcp/current_time.go deleted file mode 100644 index 41eaea30..00000000 --- a/server/mcp/current_time.go +++ /dev/null @@ -1,81 +0,0 @@ -package mcpTool - -import ( - "context" - "errors" - "fmt" - "github.com/mark3labs/mcp-go/mcp" - "time" -) - -func init() { - RegisterTool(&CurrentTime{}) -} - -type CurrentTime struct { -} - -// 获取当前系统时间 -func (t *CurrentTime) Handle(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { - // 获取当前系统时间 - - timezone, ok := request.GetArguments()["timezone"].(string) - - if !ok { - return nil, errors.New("参数错误:timezone 必须是字符串类型") - } - // 根据timezone参数加载对应时区 - loc, err := loadTimeZone(timezone) - if err != nil { - return nil, err - } - - // 获取当前时间并转换为指定时区 - currentTime := time.Now().In(loc).Format("2006-01-02 15:04:05") - //返回 - return &mcp.CallToolResult{ - Content: []mcp.Content{ - mcp.TextContent{ - Type: "text", - Text: fmt.Sprintf("%s 时区的当前时间是:%s", timezone, currentTime), - }, - }, - }, nil -} - -func (t *CurrentTime) New() mcp.Tool { - return mcp.NewTool("currentTime", - mcp.WithDescription("获取当前系统时间"), - mcp.WithString("timezone", - mcp.Required(), - mcp.Description("时区"), - mcp.Enum("UTC", "CST", "PST", "EST", "GMT", "CET", "JST", "MST", "IST", "AST", "HST"), - )) -} - -// 将简写时区转换为IANA标准时区 -func loadTimeZone(timezone string) (*time.Location, error) { - // 时区映射表 - timezoneMap := map[string]string{ - "UTC": "UTC", - "CST": "Asia/Shanghai", // 中国标准时间 - "PST": "America/Los_Angeles", - "EST": "America/New_York", - "GMT": "GMT", - "CET": "Europe/Paris", - "JST": "Asia/Tokyo", - "MST": "America/Denver", - "IST": "Asia/Kolkata", - "AST": "Asia/Riyadh", // 阿拉伯标准时间 - "HST": "Pacific/Honolulu", - } - - // 获取标准时区名称 - tzName, exists := timezoneMap[timezone] - if !exists { - return nil, errors.New("不支持的时区: " + timezone) - } - - // 加载时区 - return time.LoadLocation(tzName) -} diff --git a/server/mcp/get_nickname.go b/server/mcp/get_nickname.go deleted file mode 100644 index 6ad55f6a..00000000 --- a/server/mcp/get_nickname.go +++ /dev/null @@ -1,79 +0,0 @@ -package mcpTool - -import ( - "context" - "errors" - "fmt" - "github.com/flipped-aurora/gin-vue-admin/server/global" - "github.com/flipped-aurora/gin-vue-admin/server/model/system" - "github.com/mark3labs/mcp-go/mcp" - "gorm.io/gorm" -) - -func init() { - RegisterTool(&GetNickname{}) -} - -type GetNickname struct{} - -// 根据用户username获取nickname -func (t *GetNickname) New() mcp.Tool { - return mcp.NewTool("getNickname", - mcp.WithDescription("根据用户username获取nickname"), - mcp.WithString("username", - mcp.Required(), - mcp.Description("用户的username"), - )) -} - -// Handle 处理获取昵称的请求 -func (t *GetNickname) Handle(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) { - // 1. 参数验证 - username, ok := request.GetArguments()["username"].(string) - if !ok { - return nil, errors.New("参数错误:username 必须是字符串类型") - } - - if username == "" { - return nil, errors.New("参数错误:username 不能为空") - } - - // 2. 记录操作日志 - global.GVA_LOG.Info("getNickname 工具被调用") - - // 3. 优化查询,只选择需要的字段 - var user struct { - NickName string - } - - err := global.GVA_DB.Model(&system.SysUser{}). - Select("nick_name"). - Where("username = ?", username). - First(&user).Error - - // 4. 优化错误处理 - if err != nil { - if errors.Is(err, gorm.ErrRecordNotFound) { - return &mcp.CallToolResult{ - Content: []mcp.Content{ - mcp.TextContent{ - Type: "text", - Text: fmt.Sprintf("用户 %s 不存在", username), - }, - }, - }, nil - } - global.GVA_LOG.Error("数据库查询错误") - return nil, errors.New("系统错误,请稍后再试") - } - - // 构造回复信息 - return &mcp.CallToolResult{ - Content: []mcp.Content{ - mcp.TextContent{ - Type: "text", - Text: fmt.Sprintf("用户 %s 的昵称是 %s", username, user.NickName), - }, - }, - }, nil -} diff --git a/server/mcp/gva_auto_generate.go b/server/mcp/gva_auto_generate.go index 6c48a14e..cb9ae0c3 100644 --- a/server/mcp/gva_auto_generate.go +++ b/server/mcp/gva_auto_generate.go @@ -188,7 +188,7 @@ func (t *AutomationModuleAnalyzer) New() mcp.Tool { "desc": "详情显示(bool)", "excel": "导入导出(bool)", "require": "是否必填(bool)", - "defaultValue": "默认值(string)", + "defaultValue": "默认值(string),JSON类型(array,json,file,pictures)请保持为空他们不可以设置默认值", "errorText": "错误提示(string)", "clearable": "是否可清空(bool)", "sort": "是否排序(bool)",