MCP MySQL Server

MCP MySQL Server

Enables safe MySQL database querying through MCP, allowing natural language to SQL analysis via DeepSeek integration.

Category
Visit Server

README

MCP MySQL 查询系统 API 文档

1. 系统概述

MCP MySQL 查询系统是一个基于 Model Context Protocol (MCP) 的数据库分析解决方案,提供安全可控的 MySQL 数据库查询能力。

1.1 核心功能

  • 提供三个安全工具:list_all_tablesget_table_schemaexecute_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,分析结果

执行流程:

  1. 获取 MCP 可用工具列表
  2. 调用 DeepSeek 分析任务
  3. 决策并执行工具调用
  4. 循环直到返回最终结果或达到最大轮数(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 安全建议

  1. SQL 白名单: 可增加字段权限隔离,限制只能访问指定数据表
  2. 查询行数限制: 增加 LIMIT 限制,防止超大结果集
  3. 调用日志: MCP 增加调用日志,记录所有执行的 SQL 用于审计

6. 使用示例

6.1 启动数据分析

from client_deepseek_mcp import main
import asyncio

# 使用默认问题
asyncio.run(main())

# 自定义问题
asyncio.run(main("查询2025年所有有效订单的总数量和总交易额"))

6.2 测试查询问题

  1. 查看数据库所有表,找出用户相关表并查看结构
  2. 查询2025年所有有效订单的总数量和总交易额并做简单分析
  3. 统计每个用户的下单频次,给出简要用户分层分析

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. 扩展建议

  1. HTTP-SSE 模式: 支持远程 MCP,脱离本地 stdio 分布式调用
  2. 多数据库支持: 扩展支持 PostgreSQL、MongoDB 等
  3. 查询缓存: 增加查询结果缓存提升性能
  4. 权限分级: 实现更细粒度的表/字段访问控制

Recommended Servers

playwright-mcp

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

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.

Official
Featured
TypeScript
Kagi MCP Server

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.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured
Exa Search

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.

Official
Featured