Skip to main content
Glama
README.md7.49 kB
# Database Search MCP Server 一个基于 Model Context Protocol (MCP) 的智能数据库搜索服务,支持使用自然语言查询多种数据库类型。 ## 🚀 核心特性 ### 多数据库支持 - **MySQL** - 主流关系型数据库 - **PostgreSQL** - 高级关系型数据库 - **SQLite** - 轻量级嵌入式数据库 ### 智能查询转换 - **自然语言转SQL** - 使用 OpenAI GPT 模型将自然语言转换为精确的SQL查询 - **安全SQL检查** - 自动过滤危险操作(DROP、DELETE、UPDATE等) - **降级处理** - API 不可用时提供基础关键词匹配转换 ### 灵活配置管理 - **多环境支持** - development、test、production 环境隔离 - **环境变量配置** - 安全的敏感信息管理 - **动态数据库切换** - 运行时切换不同数据库 - **连接池管理** - 高效的数据库连接复用 ## 🏗️ 架构设计 ``` ├── src/ │ ├── index.ts # MCP 服务器主入口和工具定义 │ ├── manager.ts # 配置管理器 - 环境变量解析和配置加载 │ ├── connection-manager.ts # 数据库连接管理器 - 连接池和多数据库支持 │ ├── database.ts # 数据模型和Schema定义 │ └── nlp-service.ts # NLP服务 - 自然语言转SQL ├── config/ # 分环境配置文件 │ ├── database-development.json │ ├── database-test.json │ └── database-production.json ├── env-templates/ # 环境变量模板文件 └── setup-env.js # 环境设置自动化脚本 ``` ## 🛠️ MCP 工具接口 ### 1. query_database **使用自然语言查询数据库** ```typescript interface QueryDatabaseParams { query: string; // 自然语言查询描述 database_id?: string; // 数据库连接ID,可选 target_database?: string; // 目标数据库名称,可选 raw_sql?: boolean; // 是否直接执行SQL语句,默认false } ``` **使用示例:** ```bash # 自然语言查询 query: "查询所有用户的姓名和邮箱" # 直接SQL查询 query: "SELECT name, email FROM users LIMIT 10" raw_sql: true ``` ### 2. list_databases **列出可用的数据库连接和数据库** ```typescript interface ListDatabasesParams { database_id?: string; // 数据库连接ID,可选 } ``` ### 3. get_table_structure **获取表结构信息** ```typescript interface GetTableStructureParams { database_id?: string; // 数据库连接ID,可选 target_database?: string; // 目标数据库名称,可选 table_name?: string; // 表名,可选(不指定返回所有表) } ``` ### 4. execute_sql **直接执行SQL查询** ```typescript interface ExecuteSQLParams { sql: string; // 要执行的SQL语句 database_id?: string; // 数据库连接ID,可选 target_database?: string; // 目标数据库名称,可选 } ``` ## ⚙️ 配置指南 ### 快速开始 1. **环境设置** ```bash cd packages/database-search # 创建所有环境配置文件 npm run setup-env # 或创建特定环境 npm run setup-env:dev ``` 2. **配置数据库连接** ```bash # 编辑开发环境配置 nano .env.development ``` 3. **构建和运行** ```bash # 开发环境运行 npm run dev # 生产环境构建并运行 npm run build:prod npm run start:prod ``` ### 环境变量配置 每个环境使用独立的配置文件: - `.env.development` - 开发环境 - `.env.test` - 测试环境 - `.env.production` - 生产环境 **关键配置项:** ```env # OpenAI API配置 OPENAI_API_KEY=sk-your-api-key # 通用设置 DEFAULT_DATABASE=local-mysql MAX_QUERY_RESULTS=100 ENABLE_CACHE=true LOG_LEVEL=debug # 数据库连接 DB_LOCAL_MYSQL_HOST=localhost DB_LOCAL_MYSQL_USERNAME=root DB_LOCAL_MYSQL_PASSWORD=your_password DB_LOCAL_MYSQL_DATABASE=learn-mysql ``` ### 配置文件结构 配置文件支持环境变量占位符: ```json { "environment": { "openaiApiKey": "${OPENAI_API_KEY}", "defaultDatabase": "local-mysql", "maxQueryResults": 100 }, "databases": [ { "id": "local-mysql", "name": "本地MySQL数据库", "type": "mysql", "host": "${DB_LOCAL_MYSQL_HOST:-localhost}", "username": "${DB_LOCAL_MYSQL_USERNAME:-root}", "password": "${DB_LOCAL_MYSQL_PASSWORD}", "database": "${DB_LOCAL_MYSQL_DATABASE:-learn-mysql}" } ] } ``` ## 🔧 开发指南 ### 可用脚本命令 ```bash # 环境设置 npm run setup-env # 创建所有环境配置 npm run setup-env:dev # 创建开发环境配置 npm run setup-env:test # 创建测试环境配置 npm run setup-env:prod # 创建生产环境配置 # 开发环境 npm run dev # TypeScript 直接运行 npm run build:dev # 构建开发版本 npm run start:dev # 运行构建后的开发版本 npm run watch # 监听模式构建 # 测试环境 npm run test:run # 测试环境运行 npm run build:test # 构建测试版本 npm run start:test # 运行测试版本 # 生产环境 npm run build:prod # 构建生产版本 npm run start:prod # 运行生产版本 ``` ### 添加新数据库类型 1. **扩展 DatabaseConnection 接口** (connection-manager.ts) 2. **实现具体数据库类** 3. **更新 ConnectionManager.getConnection()** 4. **添加配置Schema** (database.ts) ### NLP 服务自定义 NLPService 支持: - 自定义 OpenAI API 端点 - 降级到关键词匹配 - SQL 安全检查 - 提示词模板自定义 ## 🔒 安全最佳实践 ### 1. 敏感信息管理 - ✅ 使用环境变量存储密码和API密钥 - ✅ `.env*` 文件已添加到 `.gitignore` - ❌ 永远不要在代码中硬编码敏感信息 ### 2. SQL 注入防护 - ✅ 自动过滤危险SQL关键词 - ✅ 参数化查询支持 - ✅ 查询结果数量限制 ### 3. 权限控制 - ✅ 数据库用户最小权限原则 - ✅ 只读查询限制(默认禁用修改操作) - ✅ 连接超时和重试机制 ### 4. 生产部署建议 - 使用环境变量而非 `.env` 文件 - 定期轮换数据库密码和API密钥 - 启用访问日志和监控 - 配置防火墙和网络隔离 ## 🐛 故障排除 ### 常见问题 **Q: 环境变量未加载** ```bash # 检查文件存在性 ls -la .env.* # 重新创建配置 npm run setup-env:dev ``` **Q: 数据库连接失败** - 检查数据库服务状态 - 验证连接参数(host、port、username、password) - 确认网络连接和防火墙设置 - 检查数据库用户权限 **Q: OpenAI API 调用失败** - 验证 `OPENAI_API_KEY` 设置 - 检查账户余额和API限制 - 确认网络连接到API端点 **Q: SQL转换不准确** - 检查表结构获取是否正确 - 尝试更具体的自然语言描述 - 使用 `raw_sql: true` 直接执行SQL ### 调试模式 启用详细日志: ```bash LOG_LEVEL=debug npm run dev ``` 这将显示: - 配置加载过程 - 数据库连接状态 - SQL生成和执行过程 - 错误详细堆栈 ## 📚 API 参考 详细的API文档和使用示例请参考: - [USAGE_EXAMPLE.md](./USAGE_EXAMPLE.md) - 完整使用示例 - [ENV_SETUP.md](./ENV_SETUP.md) - 环境配置详解 ## 📄 许可证 ISC ## 🤝 贡献 欢迎提交 Issues 和 Pull Requests! --- **注意**: 这是一个 MCP (Model Context Protocol) 服务器,需要与支持 MCP 的客户端(如 Claude Desktop)配合使用。

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/CH-122/mcp-server'

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