MCP MySQL Server
Enables safe MySQL database querying through MCP, allowing natural language to SQL analysis via DeepSeek integration.
README
MCP MySQL 查询系统 API 文档
1. 系统概述
MCP MySQL 查询系统是一个基于 Model Context Protocol (MCP) 的数据库分析解决方案,提供安全可控的 MySQL 数据库查询能力。
1.1 核心功能
- 提供三个安全工具:
list_all_tables、get_table_schema、execute_select_sql - SQL 安全限制:仅允许 SELECT,禁止 DROP/ALTER/INSERT/DELETE
- 支持与 DeepSeek 大模型对接,实现自然语言转 SQL
1.2 技术架构
┌─────────────┐ MCP stdio ┌──────────────────┐
│ DeepSeek │◄──────────────────►│ MySQL MCP │
│ Client │ │ Server │
└─────────────┘ └────────┬─────────┘
│
▼
┌──────────────┐
│ MySQL │
│ Database │
└──────────────┘
2. 环境配置
2.1 环境变量 (.env)
| 变量名 | 说明 | 示例值 |
|---|---|---|
| DEEPSEEK_API_KEY | DeepSeek API 密钥 | sk-xxxx |
| DEEPSEEK_BASE_URL | DeepSeek API 地址 | https://api.deepseek.com/v1 |
| DEEPSEEK_MODEL | 模型名称 | deepseek-chat |
| MYSQL_HOST | MySQL 主机地址 | 127.0.0.1 |
| MYSQL_PORT | MySQL 端口 | 3306 |
| MYSQL_USER | MySQL 用户名 | root |
| MYSQL_PASSWORD | MySQL 密码 | password |
| MYSQL_DATABASE | 数据库名称 | test_db |
2.2 安装依赖
pip install -r requirements.txt
3. MCP 工具 API
3.1 list_all_tables
功能: 获取数据库内所有数据表名称列表
参数: 无
返回值: 字符串,格式为 数据库表列表:[table1, table2, ...]
示例:
数据库表列表:['orders', 'products', 'users']
3.2 get_table_schema
功能: 查询指定数据表的字段结构
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| table_name | string | 是 | 数据表名称 |
返回值: 字符串,包含字段名、类型、是否为空、主键、默认值、备注
示例:
表 orders 结构(字段名|类型|是否为空|主键|默认值|备注):
[('id', 'int', 'NO', 'PRI', None, ''), ('amount', 'decimal', 'YES', '', None, '')]
3.3 execute_select_sql
功能: 执行只读 SELECT 查询 SQL 语句
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| sql | string | 是 | 纯 SELECT 查询语句 |
返回值: 字符串,包含查询结果列名和数据
示例:
{'columns': ['id', 'name'], 'data': [(1, 'Alice'), (2, 'Bob')]}
安全限制:
- 仅允许 SELECT 语句
- 禁止:INSERT、DELETE、UPDATE、DROP、ALTER、TRUNCATE、CREATE
4. MCP Client API
4.1 mcp_to_function()
将 MCP 工具转换为 OpenAI Function Call 格式。
参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| tool | Tool | MCP 工具对象 |
返回值: dict,符合 OpenAI Function Call 规范
4.2 agent_loop()
Agent 主循环,处理 DeepSeek 交互和工具调用。
参数:
| 参数名 | 类型 | 说明 |
|---|---|---|
| session | ClientSession | MCP 客户端会话 |
| user_query | str | 用户查询问题 |
返回值: str,分析结果
执行流程:
- 获取 MCP 可用工具列表
- 调用 DeepSeek 分析任务
- 决策并执行工具调用
- 循环直到返回最终结果或达到最大轮数(5轮)
4.3 main()
启动 MCP Client 并执行数据分析。
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| user_question | str | 否 | 自定义查询问题,默认使用内置示例 |
5. 安全机制
5.1 SQL 安全校验
is_safe_sql() 函数提供以下安全限制:
| 检查项 | 说明 |
|---|---|
| 语句类型 | 必须以 SELECT 开头 |
| 关键字过滤 | 禁止 INSERT、DELETE、UPDATE、DROP、ALTER、TRUNCATE、CREATE |
| 大小写不敏感 | 关键字检查不区分大小写 |
5.2 安全建议
- SQL 白名单: 可增加字段权限隔离,限制只能访问指定数据表
- 查询行数限制: 增加
LIMIT限制,防止超大结果集 - 调用日志: MCP 增加调用日志,记录所有执行的 SQL 用于审计
6. 使用示例
6.1 启动数据分析
from client_deepseek_mcp import main
import asyncio
# 使用默认问题
asyncio.run(main())
# 自定义问题
asyncio.run(main("查询2025年所有有效订单的总数量和总交易额"))
6.2 测试查询问题
- 查看数据库所有表,找出用户相关表并查看结构
- 查询2025年所有有效订单的总数量和总交易额并做简单分析
- 统计每个用户的下单频次,给出简要用户分层分析
7. 文件结构
MCP-server/
├── .env # 环境变量配置
├── .env.example # 环境变量示例
├── requirements.txt # Python 依赖
├── mysql_mcp_server.py # MCP Server 实现
├── client_deepseek_mcp.py # MCP Client 实现
├── README.md # API 文档
└── tests/
├── __init__.py
└── test_mcp_server.py # 单元测试
8. 错误处理
| 错误类型 | 返回信息 |
|---|---|
| 数据库连接失败 | 数据库连接失败:{error_message} |
| SQL 不安全 | SQL不安全,仅支持SELECT查询,禁止增删改删表等操作 |
| 查询表结构失败 | 查询表结构失败:{error_message} |
| SQL 执行异常 | SQL执行异常:{error_message} |
| 达到最大轮数 | 达到最大执行轮数,任务终止 |
9. 扩展建议
- HTTP-SSE 模式: 支持远程 MCP,脱离本地 stdio 分布式调用
- 多数据库支持: 扩展支持 PostgreSQL、MongoDB 等
- 查询缓存: 增加查询结果缓存提升性能
- 权限分级: 实现更细粒度的表/字段访问控制
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。