You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

115 lines
3.9 KiB

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
}