Skip to main content
Glama

MySQL ReadOnly MCP Server

by zhaojw-php
README.md7.74 kB
# MySQL ReadOnly MCP Server 🔒 **生产就绪** 的 MySQL 只读 MCP (Model Context Protocol) 服务器,提供安全、高性能的数据库查询服务。 ## ✨ 核心特性 - 🔒 **只读安全**: 仅允许 SELECT 查询,多层安全防护 - 🚀 **高性能**: 连接池、自动LIMIT、查询优化 - 🛡️ **企业级安全**: SQL注入防护、配置验证、SSL支持 - 🧪 **测试覆盖**: 17个全面的单元测试 - 📝 **TypeScript**: 完整类型支持 - 🔧 **多平台支持**: Claude Desktop、Claude Code、Gemini CLI ## 🚀 快速开始 ### 1. 安装依赖 ```bash git clone https://github.com/jway8975/mysql-readonly-mcp.git cd mysql-readonly-mcp npm install ``` ### 2. 配置数据库连接 ```bash cp .env.example .env ``` 编辑 `.env` 文件: ```env # 基本连接配置 MYSQL_HOST=localhost MYSQL_PORT=3306 MYSQL_USER=your_mysql_username MYSQL_PASSWORD=your_mysql_password MYSQL_DATABASE=your_database_name # SSL 配置(可选) # MYSQL_SSL_CA=path/to/ca.pem # MYSQL_SSL_CERT=path/to/cert.pem # MYSQL_SSL_KEY=path/to/key.pem # MYSQL_SSL_REJECT_UNAUTHORIZED=true ``` ### 3. 构建项目 ```bash npm run build ``` ### 4. 配置到您的AI客户端 选择以下任一配置方式: - [Claude Desktop](#claude-desktop-配置) - [Claude Code](#claude-code-配置) - [Gemini CLI](#gemini-cli-配置) ## 🔧 配置方法 ### Claude Desktop 配置 找到 Claude Desktop 配置文件: **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json` **Windows**: `%APPDATA%\Claude\claude_desktop_config.json` 添加以下配置: ```json { "mcpServers": { "mysql-readonly": { "command": "node", "args": ["完整路径/mysql-readonly-mcp/dist/index.js"], "env": { "MYSQL_HOST": "localhost", "MYSQL_PORT": "3306", "MYSQL_USER": "your_username", "MYSQL_PASSWORD": "your_password", "MYSQL_DATABASE": "your_database" } } } } ``` **⚠️ 重要提醒**: - 使用**绝对路径**,例如:`/Users/username/projects/mysql-readonly-mcp/dist/index.js` - 确保路径中有正确的项目名称 `mysql-readonly-mcp` - 配置完成后重启 Claude Desktop ### Claude Code 配置 Claude Code 会自动识别项目中的 `.claude_config` 文件。在项目根目录创建: ```bash # 创建 Claude Code 配置文件 cat > .claude_config << 'EOF' tools: mysql-readonly: type: mcp command: node args: ["./dist/index.js"] env: MYSQL_HOST: ${MYSQL_HOST} MYSQL_PORT: ${MYSQL_PORT} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} EOF ``` **使用步骤**: 1. **构建项目**: ```bash npm run build ``` 2. **设置环境变量**: ```bash export MYSQL_HOST="localhost" export MYSQL_USER="your_username" export MYSQL_PASSWORD="your_password" export MYSQL_DATABASE="your_database" ``` 3. **验证配置**: ```bash # Claude Code 会自动发现并配置 MCP 工具 claude-code "列出数据库中的所有表" ``` ### Gemini CLI 配置 1. **安装 Gemini CLI**: ```bash npm install -g @google/generative-ai-cli ``` 2. **创建 MCP 配置文件**: ```bash mkdir -p ~/.gemini cat > ~/.gemini/mcp_config.json << 'EOF' { "servers": { "mysql-readonly": { "command": "node", "args": ["完整路径/mysql-readonly-mcp/dist/index.js"], "env": { "MYSQL_HOST": "localhost", "MYSQL_USER": "your_username", "MYSQL_PASSWORD": "your_password", "MYSQL_DATABASE": "your_database" } } } } EOF ``` 3. **配置 Gemini CLI**: ```bash export GEMINI_MCP_CONFIG="$HOME/.gemini/mcp_config.json" export GEMINI_API_KEY="your_gemini_api_key" ``` 4. **测试连接**: ```bash gemini "请帮我查询用户表的前10条记录" --use-mcp mysql-readonly ``` ## 📋 环境变量说明 | 变量名 | 必需 | 默认值 | 说明 | |--------|------|--------|------| | `MYSQL_HOST` | ✅ | localhost | MySQL 服务器地址 | | `MYSQL_PORT` | ❌ | 3306 | MySQL 服务器端口 | | `MYSQL_USER` | ✅ | - | MySQL 用户名 | | `MYSQL_PASSWORD` | ✅ | - | MySQL 密码 | | `MYSQL_DATABASE` | ❌ | - | 默认连接的数据库 | | `MYSQL_SSL_CA` | ❌ | - | SSL CA 证书路径 | | `MYSQL_SSL_CERT` | ❌ | - | SSL 客户端证书路径 | | `MYSQL_SSL_KEY` | ❌ | - | SSL 客户端密钥路径 | | `MYSQL_SSL_REJECT_UNAUTHORIZED` | ❌ | true | 是否拒绝未授权的 SSL 证书 | ## 🛠️ 可用工具 ### 1. `mysql_query` - 执行SQL查询 执行只读 SQL 查询。 **参数**: - `query` (string, 必需): 要执行的 SQL 查询(仅允许 SELECT 语句) **示例**: ```json { "query": "SELECT * FROM users WHERE age > 18 ORDER BY name LIMIT 10" } ``` ### 2. `mysql_list_tables` - 列出表 列出数据库中的所有表。 **参数**: - `database` (string, 可选): 数据库名称(默认使用配置的数据库) **示例**: ```json { "database": "my_app_db" } ``` ### 3. `mysql_describe_table` - 表结构 获取表的结构和列信息。 **参数**: - `table` (string, 必需): 要描述的表名 - `database` (string, 可选): 数据库名称 **示例**: ```json { "table": "users", "database": "my_app_db" } ``` ### 4. `mysql_list_databases` - 列出数据库 列出所有可用的数据库(排除系统数据库)。 **参数**:无 ## 🔒 安全特性 - **多层只读验证**: 严格的 SELECT 语句检查 - **SQL注入防护**: 检测危险关键词和注入模式 - **自动LIMIT**: 为查询添加默认限制,防止大数据集 - **配置验证**: 启动时验证必需配置 - **连接池**: 高效的连接管理,防止连接泄露 - **SSL支持**: 加密数据库连接 ## 🧪 测试 ```bash # 运行所有测试 npm test # 运行测试并生成覆盖率报告 npm run test:coverage # 监视模式运行测试 npm run test:watch ``` ## 📊 性能优化 - **连接池**: 复用数据库连接,减少连接开销 - **查询限制**: 自动添加 LIMIT 子句,防止大查询 - **智能缓存**: 优化重复查询性能 - **内存管理**: 流式处理大型结果集 ## 🔍 故障排除 ### 连接问题 - ✅ 检查 MySQL 服务是否运行 - ✅ 验证 `.env` 文件中的凭据 - ✅ 确保用户具有数据库的 SELECT 权限 - ✅ 检查网络连接和防火墙设置 ### 配置问题 - ✅ 确保使用了绝对路径 - ✅ 验证环境变量设置 - ✅ 检查 SSL 配置(如适用) ### 常见错误 - `"Access denied"`: 检查用户名/密码和权限 - `"Connection refused"`: MySQL 服务未运行或端口错误 - `"Unknown database"`: 数据库不存在 - `"Only SELECT statements are allowed"`: 尝试执行非只读查询 ## 🚀 开发 ### 开发模式 ```bash npm run dev ``` ### 构建生产版本 ```bash npm run build ``` ### 运行生产版本 ```bash npm start ``` ## 📈 版本历史 - **v1.0.0** - 初始版本,基础功能 - **v1.1.0** - 添加连接池和性能优化 - **v1.2.0** - 增强安全特性和测试覆盖 ## 🤝 贡献 1. Fork 仓库 2. 创建特性分支 (`git checkout -b feature/amazing-feature`) 3. 提交更改 (`git commit -m 'Add amazing feature'`) 4. 推送到分支 (`git push origin feature/amazing-feature`) 5. 创建 Pull Request ## 📄 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。 ## 🆘 支持 如果您遇到问题或有疑问,请: 1. 查看 [故障排除](#故障排除) 部分 2. 检查 [Issues](https://github.com/jway8975/mysql-readonly-mcp/issues) 页面 3. 创建新的 Issue 描述您的问题 --- **🎉 感谢使用 MySQL ReadOnly MCP Server!** 现在您可以安全地让 AI 助手查询您的 MySQL 数据库了。

Latest Blog Posts

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/zhaojw-php/mysql-readonly-mcp'

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