
Text-to-SQL MCP Server
A secure database query service built on FastMCP framework that allows users to query MySQL databases using natural language, with comprehensive permission management and security controls.
README
Text-to-SQL MCP 服务器
一个基于 FastMCP 框架的安全数据库查询服务,用于数据库查询和分析。
🚀 项目简介
本项目是一个 MCP (Model Context Protocol) 服务器,专门用于提供安全的数据库查询服务。它基于 FastMCP 框架构建,支持 MySQL 数据库连接,并提供了完整的权限管理和安全控制机制。
✨ 主要功能
- 数据库连接管理: 安全的 MySQL 数据库连接和查询
- 权限认证: 基于 RSA 密钥对的 Bearer Token 认证
- 安全查询: 防止 SQL 注入和危险操作的安全检查
- 表结构查询: 获取数据库表列表和表结构信息
- SQL 执行: 安全的 SQL 查询执行,支持结果限制
- 健康检查: 服务状态监控
- 权限管理: 细粒度的权限控制
🛠️ 技术栈
- Python 3.x: 主要编程语言
- FastMCP: MCP 服务器框架
- MySQL: 数据库系统
- uvicorn: ASGI 服务器
- python-dotenv: 环境变量管理
📦 安装依赖
pip install -r requirements.txt
依赖包说明
python >=3.10
fastmcp==2.10.6
: MCP 服务器框架python-dotenv==1.1.0
: 环境变量加载mysql-connector-python==8.2.0
: MySQL 数据库连接器uvicorn==0.24.0
: ASGI 服务器
⚙️ 配置
1. 环境变量配置
复制 .env.example
文件为 .env
并配置数据库连接信息:
cp .env.example .env
编辑 .env
文件:
# 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USER=your_username
DB_PASSWORD=your_password
DB_NAME=your_database
# 可选:服务器配置
MCP_HOST=127.0.0.1
MCP_PORT=8000
2. 数据库初始化
使用提供的 dataset.sql
文件初始化示例数据:
mysql -u your_username -p your_database < dataset.sql
该文件包含了一个 contracts
表的示例数据,包含合同信息。
🚀 启动服务
python mcp_server.py
服务启动后会显示:
Authorization=Bearer ...
🚀 启动MCP数据查询服务器...
📍 地址: http://127.0.0.1:8000
📋 可用工具:
- health_check: 健康检查
- get_user_permissions: 获取用户权限
- get_database_tables: 获取数据库表列表
- get_table_structure: 获取表结构
- execute_sql_query: 执行SQL查询
- generate_sql_from_question: 自然语言生成SQL
- analyze_query_result: 查询结果分析
MCP客户端配置
🔧 API 工具
1. 健康检查
- 工具名:
health_check
- 描述: 检查服务和数据库连接状态
- 权限: 无需特殊权限
2. 获取用户权限
- 工具名:
get_user_permissions
- 描述: 获取当前用户的权限信息
- 权限: 需要有效的访问令牌
3. 获取数据库表列表
- 工具名:
get_database_tables
- 描述: 获取数据库中所有表的列表
- 权限: 需要
data:read_tables
权限
4. 获取表结构
- 工具名:
get_table_structure
- 参数:
table_name
(string): 表名
- 描述: 获取指定表的结构信息、行数和样本数据
- 权限: 需要
data:read_tables
权限
5. 执行 SQL 查询
- 工具名:
execute_sql_query
- 参数:
sql_query
(string): SQL 查询语句limit
(int, 可选): 返回结果的最大行数,默认 100
- 描述: 安全执行 SQL 查询
- 权限: 需要
data:read_table_data
权限 - 安全限制: 禁止执行 DROP, DELETE, UPDATE, INSERT 等修改操作
🔐 安全特性
权限系统
- 基于 RSA 密钥对的 JWT Token 认证
- 细粒度权限控制:
data:read_tables
: 读取表结构权限data:read_table_data
: 读取表数据权限
安全检查
- SQL 注入防护: 禁止危险的 SQL 操作
- 查询限制: 自动添加 LIMIT 限制,防止大量数据查询
- 敏感数据保护: 对包含敏感关键词的查询进行额外权限检查
📁 项目结构
text-to-sql-mcp/
├── mcp_server.py # 主服务器文件
├── database.py # 数据库管理模块
├── auth_token.py # 认证令牌生成模块
├── requirements.txt # 项目依赖
├── .env.example # 环境变量示例
├── dataset.sql # 示例数据库结构和数据
└── README.md # 项目文档
🔍 核心模块说明
mcp_server.py
主服务器文件,包含:
- MCP 服务器初始化
- 所有 API 工具的定义
- 权限验证逻辑
- 安全检查机制
database.py
数据库管理模块,提供:
- MySQL 数据库连接管理
- SQL 查询执行
- 表结构信息获取
- 数据类型转换
auth_token.py
认证模块,负责:
- RSA 密钥对生成
- JWT 访问令牌创建
- 认证提供者配置
🚨 注意事项
- 数据库安全: 确保数据库用户权限最小化,只授予必要的查询权限
- 网络安全: 生产环境建议使用 HTTPS 和防火墙保护
- 令牌管理: 定期更新访问令牌,避免长期使用同一令牌
- 查询监控: 监控查询性能,避免复杂查询影响数据库性能
🤝 贡献
欢迎提交 Issue 和 Pull Request 来改进这个项目。
我的作品
n8n 工作流自动化模版站,收集了大量可直接使用的自动化流程:https://n8ntemplates.dev
推荐服务器

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 模型以安全和受控的方式获取实时的网络信息。