Skip to main content
Glama

Text-to-SQL MCP Server

by tmstack
README.md5.42 kB
# Text-to-SQL MCP 数据查询服务器 一个基于 FastMCP 框架的安全数据库查询 MCP 服务,用于数据库查询和分析。 ## 🚀 项目简介 本项目是一个 MCP (Model Context Protocol) 服务器,专门用于提供安全的数据库查询服务。它基于 FastMCP 框架构建,支持 MySQL 数据库连接,并提供了完整的权限管理和安全控制机制。 ## ✨ 主要功能 - **数据库连接管理**: 安全的 MySQL 数据库连接和查询 - **权限认证**: 基于 RSA 密钥对的 Bearer Token 认证 - **安全查询**: 防止 SQL 注入和危险操作的安全检查 - **表结构查询**: 获取数据库表列表和表结构信息 - **SQL 执行**: 安全的 SQL 查询执行,支持结果限制 - **健康检查**: 服务状态监控 - **权限管理**: 细粒度的权限控制 ## 🛠️ 技术栈 - **Python 3.x**: 主要编程语言 - **FastMCP**: MCP 服务器框架 - **MySQL**: 数据库系统 - **uvicorn**: ASGI 服务器 - **python-dotenv**: 环境变量管理 ## 📦 安装依赖 ```bash 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` 并配置数据库连接信息: ```bash cp .env.example .env ``` 编辑 `.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` 文件初始化示例数据: ```bash mysql -u your_username -p your_database < dataset.sql ``` 该文件包含了一个 `contracts` 表的示例数据,包含合同信息。 ## 🚀 启动服务 ```bash 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客户端配置 ![config-example](config-example.png) ## 🔧 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 访问令牌创建 - 认证提供者配置 ## 🚨 注意事项 1. **数据库安全**: 确保数据库用户权限最小化,只授予必要的查询权限 2. **网络安全**: 生产环境建议使用 HTTPS 和防火墙保护 3. **令牌管理**: 定期更新访问令牌,避免长期使用同一令牌 4. **查询监控**: 监控查询性能,避免复杂查询影响数据库性能 ## 🤝 贡献 欢迎提交 Issue 和 Pull Request 来改进这个项目。 ## 我的作品 n8n 工作流自动化模版站,收集了大量可直接使用的自动化流程:https://n8ntemplates.dev

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tmstack/text-to-sql-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server