package vTool import ( "context" "encoding/json" "github.com/mark3labs/mcp-go/mcp" "mcp-go-db/vConfig" "mcp-go-db/vService" ) // DBInfo 查询系统环境信息 func DBInfo(config *vConfig.Config) (*mcp.CallToolResult, error) { return mcp.NewToolResultText("环境为:" + config.Database.DmDsn), nil } // AllTable 查询数据Tool func AllTable(ctx context.Context, request mcp.CallToolRequest, dbSvc *vService.DMDBService) (*mcp.CallToolResult, error) { dbName, _ := request.Params.Arguments["库名"].(string) data, err := dbSvc.AllTable(ctx, dbName) if err != nil { return mcp.NewToolResultError(err.Error()), nil } jsonData, err := json.Marshal(data) if err != nil { // 错误处理 return mcp.NewToolResultError("JSON 序列化失败"), nil } return mcp.NewToolResultText(string(jsonData)), nil } // FetchData 查询数据Tool func FetchData(ctx context.Context, request mcp.CallToolRequest, dbSvc *vService.DMDBService) (*mcp.CallToolResult, error) { dbName, ok := request.Params.Arguments["库名"].(string) tableName, ok := request.Params.Arguments["表名"].(string) if !ok { return mcp.NewToolResultError("缺少表名参数"), nil } limit := 10 if limitVal, ok := request.Params.Arguments["限制"].(float64); ok { limit = int(limitVal) } data, err := dbSvc.FetchData(ctx, dbName, tableName, limit) if err != nil { return mcp.NewToolResultError(err.Error()), nil } jsonData, err := json.Marshal(data) if err != nil { // 错误处理 return mcp.NewToolResultError("JSON 序列化失败"), nil } return mcp.NewToolResultText(string(jsonData)), nil } // AddColumn 添加字段Tool func AddColumn(ctx context.Context, request mcp.CallToolRequest, dbSvc *vService.DMDBService) (*mcp.CallToolResult, error) { dbName, ok := request.Params.Arguments["库名"].(string) tableName, ok := request.Params.Arguments["表名"].(string) if !ok { return mcp.NewToolResultError("缺少表名参数"), nil } columnName, ok := request.Params.Arguments["字段名"].(string) if !ok { return mcp.NewToolResultError("缺少字段名参数"), nil } columnType, ok := request.Params.Arguments["字段类型"].(string) if !ok { return mcp.NewToolResultError("缺少字段类型参数"), nil } if err := dbSvc.AddColumn(ctx, dbName, tableName, columnName, columnType); err != nil { return mcp.NewToolResultError(err.Error()), nil } return mcp.NewToolResultText("字段添加成功"), nil } // AddComment 添加注释Tool func AddComment(ctx context.Context, request mcp.CallToolRequest, dbSvc *vService.DMDBService) (*mcp.CallToolResult, error) { dbName, ok := request.Params.Arguments["库名"].(string) tableName, ok := request.Params.Arguments["表名"].(string) if !ok { return mcp.NewToolResultError("缺少表名参数"), nil } columnName, ok := request.Params.Arguments["字段名"].(string) if !ok { return mcp.NewToolResultError("缺少字段名参数"), nil } columnComment, ok := request.Params.Arguments["注释描述"].(string) if !ok { return mcp.NewToolResultError("缺少注释参数"), nil } if err := dbSvc.AddComment(ctx, dbName, tableName, columnName, columnComment); err != nil { return mcp.NewToolResultError(err.Error()), nil } return mcp.NewToolResultText("字段添加注释成功"), nil } // DropColumn 字段删除Tool func DropColumn(ctx context.Context, request mcp.CallToolRequest, dbSvc *vService.DMDBService) (*mcp.CallToolResult, error) { dbName, ok := request.Params.Arguments["库名"].(string) tableName, ok := request.Params.Arguments["表名"].(string) if !ok { return mcp.NewToolResultError("缺少表名参数"), nil } columnName, ok := request.Params.Arguments["字段名"].(string) if !ok { return mcp.NewToolResultError("缺少字段名"), nil } if err := dbSvc.DropColumn(ctx, dbName, tableName, columnName); err != nil { return mcp.NewToolResultError(err.Error()), nil } return mcp.NewToolResultText("字段删除成功"), nil }