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 等
- 查询缓存: 增加查询结果缓存提升性能
- 权限分级: 实现更细粒度的表/字段访问控制
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.