项目简介
本项目是一个基于 Model Context Protocol (MCP) 实现的 MySQL 数据库服务端。它使得大语言模型(LLM)能够以标准化的方式安全、高效地访问和操作 MySQL 数据库。
主要功能点
- 表结构查询: 允许 LLM 通过自然语言描述查找相关的数据库表结构信息,为生成准确的 SQL 语句提供帮助。
- SQL 查询执行: 支持 LLM 直接向 MySQL 数据库发送并执行 SQL 查询语句,并接收查询结果。
- 智能表查找: 结合向量数据库(Milvus)和文本嵌入技术,通过语义相似度快速定位与自然语言查询相关的数据库表。
- 自动结构索引: 系统启动时自动获取所有表结构并建立向量索引,并支持定时更新,确保结构信息的时效性。
安装步骤
-
环境准备:
- 确保您的系统已安装 Go 1.23 或更高版本。
- 准备一个可访问的 MySQL 数据库实例。
- 准备一个可访问的 Milvus 向量数据库实例(版本 2.5+ 兼容)。
- 获取 SiliconFlow 的 API 访问凭证(Token 和 API 端点 URL),用于生成文本嵌入向量。
-
构建应用:
- 克隆或下载本项目代码。
- 打开终端,切换到项目根目录。
- 执行命令 'go build -o /your/desired/path/mcp-mysql' 将项目编译为可执行文件。请将 '/your/desired/path/' 替换为您希望存放可执行文件的实际路径。
-
配置环境变量:
- 在您存放 '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 数据库交互:
- 获取表结构: LLM 可以调用名为 'get_can_use_table' 的工具,并传入一个自然语言描述作为参数(如 '"查询用户订单信息需要的表"'),服务器会返回与描述相关的数据库表结构信息。
- 执行 SQL: LLM 根据获取到的表结构信息或自身知识生成 SQL 语句,然后调用名为 'execute_sql' 的工具,将 SQL 语句作为参数传入(如 '"SELECT * FROM users LIMIT 10;"'),服务器将执行该 SQL 并返回结果。
信息
分类
数据库与文件