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.
63 lines
1.4 KiB
63 lines
1.4 KiB
package main
|
|
|
|
import (
|
|
_ "dm" // 达梦数据库驱动
|
|
"flag"
|
|
"fmt"
|
|
"github.com/mark3labs/mcp-go/server"
|
|
"log"
|
|
"mcp-go-db/vConfig"
|
|
"mcp-go-db/vService"
|
|
"mcp-go-db/vTool"
|
|
)
|
|
|
|
func main() {
|
|
// 开发
|
|
// name := "dm://HY_ZGGL_FRAME:HY_ZGGL_FRAME@10.200.21.19:5296/DAMENG?schema=HY_ZGGL_FRAME"
|
|
|
|
// 部署
|
|
var dsn string
|
|
flag.StringVar(&dsn, "dsn", "dm://usr:pwd@ip:port/db?schema=name", "服务连接信息")
|
|
|
|
// 必须调用 flag.Parse() 来解析命令行参数
|
|
flag.Parse()
|
|
|
|
fmt.Printf("启动数据库服务...\n%v\n", dsn)
|
|
// 加载配置
|
|
config, err := vConfig.LoadConfig(dsn)
|
|
if err != nil {
|
|
log.Fatalf("配置文件加载失败: %v", err)
|
|
}
|
|
|
|
// 初始化数据库连接
|
|
dbSvc, err := vService.NewDMDBService(config.Database.DmDsn)
|
|
if err != nil {
|
|
fmt.Printf("数据库连接失败: %v\n", err)
|
|
return
|
|
}
|
|
defer func(dbSvc *vService.DMDBService) {
|
|
err := dbSvc.Close()
|
|
if err != nil {
|
|
log.Fatalf("发生异常: %v", err)
|
|
}
|
|
}(dbSvc)
|
|
fmt.Printf("数据库连接成功...\n")
|
|
|
|
// 创建MCP服务器
|
|
s := server.NewMCPServer(
|
|
"数据库服务",
|
|
"1.0.0",
|
|
server.WithResourceCapabilities(true, true),
|
|
server.WithLogging(),
|
|
server.WithRecovery(),
|
|
)
|
|
|
|
// 添加数据库工具
|
|
vTool.Run(s, dbSvc, config)
|
|
|
|
// 启动MCP服务器
|
|
if err := server.ServeStdio(s); err != nil {
|
|
fmt.Printf("服务器错误: %v\n", err)
|
|
}
|
|
fmt.Printf("服务已停止\n")
|
|
}
|
|
|