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