项目简介
这是一个基于 Model Context Protocol (MCP) 实现的 MySQL 只读服务器。它旨在允许大型语言模型 (LLM) 通过标准化的 MCP 接口,以安全受控的方式访问和查询 MySQL 数据库的数据。服务器强制执行只读操作,并提供连接池、参数化查询、结果限制等功能。
主要功能点
- 只读访问: 仅允许执行 'SELECT', 'SHOW', 'DESCRIBE', 'EXPLAIN' 等只读 SQL 语句,禁止其他操作。
- 安全防护: 防止多语句执行和 SQL 注入(通过参数化查询)。
- 连接管理: 使用连接池高效管理数据库连接。
- 结果控制: 自动限制查询返回的最大行数。
- 上下文增强: 通过资源描述文件提供数据库结构等上下文信息给 LLM。
- 标准接口: 通过 MCP JSON-RPC 协议与 LLM 客户端通信。
安装步骤
- 克隆仓库代码:
git clone https://github.com/the-nine-nation/mysql-mcp.git cd mysql-mcp - 安装项目及其依赖:
这将安装项目所需的 Python 库,包括 'aiomysql' 和 'mcp'。pip install -e .
服务器配置
MCP 服务器通常由 MCP 客户端(如 LLM 应用)通过启动外部进程的方式连接。客户端需要知道如何启动服务器进程。以下是一个示例配置结构,用于告诉 MCP 客户端如何启动此 MySQL MCP 服务器:
// MCP客户端配置文件中的一部分 { "servers": { "mysql": { // 服务器的名称,自定义 "command": "python", // 或 sys.executable, MCP服务器可执行文件的路径 "args": ["/path/to/your/mysql-mcp/src/main.py"], // 启动脚本的路径 "env": { // 传递给MCP服务器进程的环境变量 "MYSQL_ENABLED": "true", // 启用MySQL功能,设为 "true" "MYSQL_HOST": "your_mysql_host", // MySQL数据库IP地址 "MYSQL_PORT": "3306", // MySQL数据库端口,默认为 3306 "MYSQL_DATABASE": "your_database_name", // MySQL数据库名称 "MYSQL_USERNAME": "your_mysql_username", // MySQL数据库用户名 "MYSQL_PASSWORD": "your_mysql_password", // MySQL数据库密码 "MYSQL_POOL_MINSIZE": "1", // 连接池最小连接数 "MYSQL_POOL_MAXSIZE": "10", // 连接池最大连接数 "MYSQL_RESOURCE_DESC_FILE": "/path/to/your/resource_description.txt", // 包含数据库描述信息的文本文件路径(必需) "MAX_ROWS": "20" // 查询结果默认最大行数,默认为 20 } } // ... 其他MCP服务器配置 } }
请确保替换配置中的占位符信息。特别是 'MYSQL_RESOURCE_DESC_FILE' 指向的文件应包含对 LLM 有用的数据库上下文,例如表名、列名、表的功能等描述。
基本使用方法
LLM 客户端与此 MCP 服务器建立连接后,可以发现并调用名为 'mysql_execute_read_query' 的工具。调用时,LLM 需要提供一个包含只读 SQL 查询语句的 'query' 参数,可选地提供 'params' 参数用于参数化查询,以及可选的 'max_rows' 参数限制结果数量。
服务器将执行该查询,对查询和参数进行安全检查,然后将查询结果格式化为易于 LLM 理解的文本表格形式返回。
例如,LLM可能会构建如下的工具调用参数:
{ "name": "mysql_execute_read_query", "arguments": { "query": "SELECT id, name, status FROM users WHERE status = %s", "params": ["active"], "max_rows": 50 } }
服务器执行后会返回类似以下格式的字符串结果:
id | name | status ---+-----------+-------- 1 | Alice | active 2 | Bob | active ... Total rows: 100 (showing first 50)
信息
分类
数据库与文件