项目简介

本项目是一个基于 Model Context Protocol (MCP) 实现的 MySQL 数据库服务端。它使得大语言模型(LLM)能够以标准化的方式安全、高效地访问和操作 MySQL 数据库。

主要功能点

  • 表结构查询: 允许 LLM 通过自然语言描述查找相关的数据库表结构信息,为生成准确的 SQL 语句提供帮助。
  • SQL 查询执行: 支持 LLM 直接向 MySQL 数据库发送并执行 SQL 查询语句,并接收查询结果。
  • 智能表查找: 结合向量数据库(Milvus)和文本嵌入技术,通过语义相似度快速定位与自然语言查询相关的数据库表。
  • 自动结构索引: 系统启动时自动获取所有表结构并建立向量索引,并支持定时更新,确保结构信息的时效性。

安装步骤

  1. 环境准备:

    • 确保您的系统已安装 Go 1.23 或更高版本。
    • 准备一个可访问的 MySQL 数据库实例。
    • 准备一个可访问的 Milvus 向量数据库实例(版本 2.5+ 兼容)。
    • 获取 SiliconFlow 的 API 访问凭证(Token 和 API 端点 URL),用于生成文本嵌入向量。
  2. 构建应用:

    • 克隆或下载本项目代码。
    • 打开终端,切换到项目根目录。
    • 执行命令 'go build -o /your/desired/path/mcp-mysql' 将项目编译为可执行文件。请将 '/your/desired/path/' 替换为您希望存放可执行文件的实际路径。
  3. 配置环境变量:

    • 在您存放 'mcp-mysql' 可执行文件的目录 ('/your/desired/path/') 创建一个名为 '.env' 的文件。
    • 在该文件中,按照以下格式配置数据库、Milvus 和 SiliconFlow 的连接信息:
    DB_USER=your_mysql_user
    DB_PASSWORD=your_mysql_password
    DB_HOST=your_mysql_host
    DB_PORT=3306 # 或您的MySQL端口
    DB_NAME=your_database_name
    DB_PARAMS=charset=utf8mb4&parseTime=True # 可选:数据库连接参数
    
    SILICONFLOW_TOKEN=your_siliconflow_api_token
    SILICONFLOW_URL=your_siliconflow_api_url # 例如:https://api.siliconflow.cn/v1/embeddings
    
    MILVUS_HOST=your_milvus_host
    MILVUS_PORT=19530 # 或您的Milvus端口
    MILVUS_COLLECTION=your_milvus_collection_name # 用于存放表结构向量的集合名称

服务器配置 (供 MCP 客户端使用)

要让您的 MCP 客户端(如支持 MCP 的 LLM 宿主应用)连接到此 MySQL MCP 服务端,您需要在客户端的 MCP 配置中添加一个条目。配置通常是一个 JSON 格式的对象,其中包含服务端的启动信息。

以下是配置示例及其参数说明:

// 示例 MCP 客户端配置片段
{
  "your_mcp_service_name": { // 自定义的服务端名称,供客户端识别
    "timeout": 60,           // 客户端等待服务端响应的超时时间(秒)
    "command": "/your/desired/path/mcp-mysql", // 必须:指向您编译生成的可执行文件的绝对路径
    "args": [                // 可选:传递给服务端的命令行参数
      "-m",                  // 示例参数,具体含义取决于服务端实现
      "query",
      ""
    ],
    "transportType": "stdio" // 必须:客户端和服务端之间的通信方式,本项目使用 stdio
  }
}

请将 '"your_mcp_service_name"' 替换为您希望在客户端中使用的名称,并将 '"command"' 的值替换为您实际存放 'mcp-mysql' 可执行文件的绝对路径。

基本使用方法 (LLM 通过客户端交互)

一旦 MCP 客户端与此服务器建立连接并加载其能力,LLM 可以通过调用服务器提供的工具来与 MySQL 数据库交互:

  1. 获取表结构: LLM 可以调用名为 'get_can_use_table' 的工具,并传入一个自然语言描述作为参数(如 '"查询用户订单信息需要的表"'),服务器会返回与描述相关的数据库表结构信息。
  2. 执行 SQL: LLM 根据获取到的表结构信息或自身知识生成 SQL 语句,然后调用名为 'execute_sql' 的工具,将 SQL 语句作为参数传入(如 '"SELECT * FROM users LIMIT 10;"'),服务器将执行该 SQL 并返回结果。

信息

分类

数据库与文件