Go MCP MSSQL

March 31, 2025 · View on GitHub

这是一个基于 MSSQL 的 MCP(Model-Controller-Persistence)服务实现。它提供了一组工具来管理和操作 MSSQL 数据库。

什么是 MCP

MCP (Model-Controller-Persistence) 是一种用于构建 AI 工具的协议和框架,它允许 AI 助手与外部服务和数据源交互。MCP 框架的核心理念包括:

  1. 工具定义 - 服务定义一组"工具",每个工具代表一个可被 AI 调用的操作
  2. 参数约束 - 每个工具定义明确的参数和类型,确保 AI 调用时提供正确的数据
  3. 标准化通信 - 使用标准化的通信协议在 AI 和外部服务之间交换数据
  4. 安全边界 - 限制 AI 只能通过预定义的工具与外部系统交互

MCP 的组成部分

  • 工具 (Tools): 定义服务可执行的操作,包括名称、描述和参数
  • 工具处理程序 (Tool Handlers): 实现工具的业务逻辑
  • 服务器 (Server): 负责接收请求、路由到相应的处理程序并返回结果
  • 协议 (Protocol): 定义 AI 和服务之间的通信格式和流程

功能特性

  • 数据库管理:列出数据库和表
  • 表操作:创建、修改和描述表结构
  • 数据操作:执行查询、插入、更新和删除操作
  • 查询计划分析:支持执行计划检查
  • 只读模式:可选的只读模式以防止数据修改

安装

go get github.com/knight0zh/go-mcp-mssql

使用方法

命令行参数

  • -host: MSSQL 服务器主机名(默认:localhost)
  • -user: MSSQL 用户名(默认:sa)
  • -pass: MSSQL 密码
  • -port: MSSQL 端口(默认:1433)
  • -db: MSSQL 数据库名
  • -dsn: MSSQL DSN(可选,如果提供则忽略其他连接参数)
  • -read-only: 启用只读模式
  • -with-explain-check: 在执行查询前检查执行计划

示例

# 使用基本连接参数
go-mcp-mssql -host localhost -user sa -pass mypassword -db mydatabase

# 使用 DSN
go-mcp-mssql -dsn "server=localhost;user id=sa;password=mypassword;database=mydatabase"

# 启用只读模式
go-mcp-mssql -host localhost -user sa -pass mypassword -db mydatabase -read-only

# 启用执行计划检查
go-mcp-mssql -host localhost -user sa -pass mypassword -db mydatabase -with-explain-check

MCP 工具说明

本项目使用 MCP 框架实现了一系列数据库操作工具。每个工具代表一个可以被 AI 助手调用的操作。

MCP 工具定义模式

工具的定义遵循以下模式:

toolName := mcp.NewTool(
    "tool_name",                       // 工具名称
    mcp.WithDescription("描述信息"),      // 工具描述
    mcp.WithString("参数名",             // 字符串参数
        mcp.Required(),                // 参数是否必需
        mcp.Description("参数描述"),      // 参数描述
    ),
    // 其他参数...
)

MCP 工具实现模式

工具的实现遵循以下模式:

s.AddTool(toolName, func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error) {
    // 从请求中获取参数
    param := request.Params.Arguments["参数名"].(string)
    
    // 执行业务逻辑
    result, err := DoSomething(param)
    if err != nil {
        return mcp.NewToolResultError(err.Error()), nil
    }
    
    // 返回成功结果
    return mcp.NewToolResultText(result), nil
})

数据库工具

  • list_database: 列出所有数据库
  • list_table: 列出所有表
  • desc_table: 描述表结构

表操作工具

  • create_table: 创建新表
  • alter_table: 修改现有表

数据操作工具

  • read_query: 执行只读查询
  • write_query: 执行写入操作
  • update_query: 执行更新操作
  • delete_query: 执行删除操作

MCP 集成到 AI 助手

要将此 MCP 服务集成到 AI 助手中,可以在配置文件中添加以下内容:

{
  "mcpServers": {
    "mssql": {
      "command": "go-mcp-mssql",
      "args": [
        "--host", "localhost",
        "--user", "sa",
        "--pass", "yourpassword",
        "--db", "yourdatabase"
      ]
    }
  }
}

然后 AI 助手可以通过以下方式调用工具:

使用 mssql.list_table 列出所有表
使用 mssql.desc_table 查看表结构,表名为 'users'
使用 mssql.read_query 执行查询 'SELECT * FROM users WHERE id = 1'

注意事项

  1. 在执行写入操作前,建议先使用 desc_table 了解表结构
  2. 更新和删除操作必须包含 WHERE 条件
  3. 在生产环境中建议启用 -read-only 模式以防止意外的数据修改
  4. 使用 -with-explain-check 可以帮助优化查询性能

许可证

MIT License