Skip to main content
Glama
USAGE_EXAMPLE.md11.1 kB
# Database Search MCP Server 使用示例 ## 🚀 快速开始 ### 1. 环境设置 ```bash # 进入项目目录 cd packages/database-search # 自动创建环境配置文件 npm run setup-env:dev # 编辑开发环境配置 nano .env.development ``` **配置示例 (.env.development):** ```env # OpenAI API 密钥 OPENAI_API_KEY=sk-your-actual-openai-api-key # 数据库连接配置 DB_LOCAL_MYSQL_HOST=localhost DB_LOCAL_MYSQL_USERNAME=root DB_LOCAL_MYSQL_PASSWORD=your_password DB_LOCAL_MYSQL_DATABASE=learn-mysql # 服务配置 DEFAULT_DATABASE=local-mysql MAX_QUERY_RESULTS=50 LOG_LEVEL=debug ``` ### 2. 启动服务 ```bash # 开发环境运行 npm run dev # 或者构建后运行 npm run build:dev npm run start:dev ``` ## 🛠️ MCP 工具使用指南 Database Search MCP Server 提供了4个核心工具,可以通过支持 MCP 的客户端(如 Claude Desktop)调用。 ### 1. query_database - 智能查询 **功能**: 使用自然语言或直接SQL查询数据库 #### 自然语言查询示例 ```json { "tool": "query_database", "parameters": { "query": "查询所有用户的姓名和邮箱地址", "database_id": "local-mysql" } } ``` **系统会自动转换为:** ```sql SELECT name, email FROM users; ``` #### 更多自然语言查询示例 ```json // 统计查询 { "query": "统计每个部门的员工数量", "database_id": "local-mysql" } // 条件查询 { "query": "查找年龄大于25岁的活跃用户", "database_id": "local-mysql" } // 排序查询 { "query": "按照创建时间倒序显示最近的10个订单", "database_id": "local-mysql" } // 关联查询 { "query": "查询用户及其订单信息,包括用户名和订单总金额", "database_id": "local-mysql" } ``` #### 直接SQL查询示例 ```json { "tool": "query_database", "parameters": { "query": "SELECT u.name, COUNT(o.id) as order_count FROM users u LEFT JOIN orders o ON u.id = o.user_id GROUP BY u.id", "raw_sql": true, "database_id": "local-mysql" } } ``` #### 跨数据库查询 ```json { "tool": "query_database", "parameters": { "query": "查询分析数据库中的用户行为统计", "database_id": "local-mysql", "target_database": "analytics" } } ``` ### 2. list_databases - 数据库探索 **功能**: 查看可用的数据库连接和数据库列表 #### 列出所有数据库连接 ```json { "tool": "list_databases", "parameters": {} } ``` **返回示例:** ```json [ { "connection": { "id": "local-mysql", "name": "本地MySQL开发数据库", "type": "mysql", "current_database": "learn-mysql" }, "available_databases": ["learn-mysql", "test_db", "analytics"] }, { "connection": { "id": "test-sqlite", "name": "测试SQLite数据库", "type": "sqlite", "current_database": "test.db" }, "available_databases": ["test.db"] } ] ``` #### 查看特定连接的数据库 ```json { "tool": "list_databases", "parameters": { "database_id": "local-mysql" } } ``` ### 3. get_table_structure - 结构分析 **功能**: 获取数据库表结构信息,帮助理解数据模型 #### 获取所有表结构 ```json { "tool": "get_table_structure", "parameters": { "database_id": "local-mysql" } } ``` #### 获取特定表结构 ```json { "tool": "get_table_structure", "parameters": { "database_id": "local-mysql", "table_name": "users" } } ``` **返回示例(MySQL):** ```json { "database": "本地MySQL开发数据库", "target_database": "learn-mysql", "structure": [ { "Field": "id", "Type": "int(11)", "Null": "NO", "Key": "PRI", "Default": null, "Extra": "auto_increment" }, { "Field": "name", "Type": "varchar(100)", "Null": "NO", "Key": "", "Default": null, "Extra": "" }, { "Field": "email", "Type": "varchar(255)", "Null": "YES", "Key": "UNI", "Default": null, "Extra": "" } ] } ``` #### 获取其他数据库的表结构 ```json { "tool": "get_table_structure", "parameters": { "database_id": "local-mysql", "target_database": "analytics", "table_name": "user_events" } } ``` ### 4. execute_sql - 直接执行 **功能**: 直接执行SQL语句,适用于复杂查询 #### 基本SQL执行 ```json { "tool": "execute_sql", "parameters": { "sql": "SELECT COUNT(*) as total_users FROM users WHERE status = 'active'", "database_id": "local-mysql" } } ``` #### 复杂分析查询 ```json { "tool": "execute_sql", "parameters": { "sql": "SELECT DATE(created_at) as date, COUNT(*) as daily_signups FROM users WHERE created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY) GROUP BY DATE(created_at) ORDER BY date", "database_id": "local-mysql" } } ``` #### 跨表关联查询 ```json { "tool": "execute_sql", "parameters": { "sql": "SELECT u.name, u.email, COUNT(o.id) as order_count, SUM(o.total_amount) as total_spent FROM users u LEFT JOIN orders o ON u.id = o.user_id GROUP BY u.id HAVING total_spent > 1000 ORDER BY total_spent DESC", "database_id": "local-mysql" } } ``` ## 🎯 实际使用场景 ### 场景1:数据探索分析 **步骤1**: 了解数据库结构 ```json { "tool": "list_databases", "parameters": {} } ``` **步骤2**: 查看表结构 ```json { "tool": "get_table_structure", "parameters": { "database_id": "local-mysql" } } ``` **步骤3**: 探索性查询 ```json { "tool": "query_database", "parameters": { "query": "显示用户表的前10条记录", "database_id": "local-mysql" } } ``` ### 场景2:业务数据分析 **分析用户活跃度:** ```json { "tool": "query_database", "parameters": { "query": "统计最近30天每天的活跃用户数量", "database_id": "local-mysql" } } ``` **分析销售趋势:** ```json { "tool": "execute_sql", "parameters": { "sql": "SELECT MONTH(order_date) as month, SUM(total_amount) as monthly_revenue FROM orders WHERE YEAR(order_date) = 2024 GROUP BY MONTH(order_date) ORDER BY month", "database_id": "local-mysql" } } ``` ### 场景3:多数据库查询 **步骤1**: 查询主数据库 ```json { "tool": "query_database", "parameters": { "query": "获取所有用户的基本信息", "database_id": "local-mysql", "target_database": "production" } } ``` **步骤2**: 查询分析数据库 ```json { "tool": "query_database", "parameters": { "query": "获取用户行为分析数据", "database_id": "local-mysql", "target_database": "analytics" } } ``` ## 🔧 不同环境的配置示例 ### 开发环境配置 **.env.development:** ```env NODE_ENV=development OPENAI_API_KEY=sk-dev-key-here DEFAULT_DATABASE=local-mysql MAX_QUERY_RESULTS=50 ENABLE_CACHE=true LOG_LEVEL=debug # 本地开发数据库 DB_LOCAL_MYSQL_HOST=localhost DB_LOCAL_MYSQL_PORT=3306 DB_LOCAL_MYSQL_USERNAME=root DB_LOCAL_MYSQL_PASSWORD=dev_password DB_LOCAL_MYSQL_DATABASE=learn-mysql # 本地SQLite测试库 DB_LOCAL_SQLITE_DATABASE=./dev.db ``` **运行开发环境:** ```bash npm run dev ``` ### 测试环境配置 **.env.test:** ```env NODE_ENV=test OPENAI_API_KEY=sk-test-key-here DEFAULT_DATABASE=test-sqlite MAX_QUERY_RESULTS=10 ENABLE_CACHE=false LOG_LEVEL=debug # 测试数据库 DB_TEST_SQLITE_DATABASE=./test.db ``` **运行测试环境:** ```bash npm run test:run ``` ### 生产环境配置 **.env.production:** ```env NODE_ENV=production OPENAI_API_KEY=sk-prod-key-here DEFAULT_DATABASE=prod-mysql MAX_QUERY_RESULTS=200 ENABLE_CACHE=true LOG_LEVEL=warn # 生产数据库 DB_PROD_MYSQL_HOST=prod.database.server DB_PROD_MYSQL_PORT=3306 DB_PROD_MYSQL_USERNAME=prod_user DB_PROD_MYSQL_PASSWORD=secure_prod_password DB_PROD_MYSQL_DATABASE=production # 分析数据库 DB_PROD_POSTGRES_HOST=analytics.database.server DB_PROD_POSTGRES_PORT=5432 DB_PROD_POSTGRES_USERNAME=analytics_user DB_PROD_POSTGRES_PASSWORD=analytics_password DB_PROD_POSTGRES_DATABASE=analytics ``` **运行生产环境:** ```bash npm run build:prod npm run start:prod ``` ## 📋 常用命令参考 ### 环境管理 ```bash # 创建环境配置 npm run setup-env # 所有环境 npm run setup-env:dev # 开发环境 npm run setup-env:test # 测试环境 npm run setup-env:prod # 生产环境 ``` ### 开发命令 ```bash # 开发模式 npm run dev # TypeScript直接运行 npm run watch # 监听模式构建 # 构建命令 npm run build:dev # 构建开发版本 npm run build:test # 构建测试版本 npm run build:prod # 构建生产版本 # 运行命令 npm run start:dev # 运行开发版本 npm run start:test # 运行测试版本 npm run start:prod # 运行生产版本 ``` ## 🐛 故障排除 ### 问题1:环境变量未加载 **现象**:应用启动时提示找不到配置 **解决方案**: ```bash # 检查环境文件 ls -la .env.* # 如果不存在,重新创建 npm run setup-env:dev # 检查文件内容 cat .env.development ``` ### 问题2:数据库连接失败 **现象**:查询时报连接错误 **诊断步骤**: ```bash # 1. 测试数据库连接 mysql -h localhost -u root -p # 2. 检查配置是否正确 echo $DB_LOCAL_MYSQL_HOST echo $DB_LOCAL_MYSQL_USERNAME # 3. 启用调试日志 LOG_LEVEL=debug npm run dev ``` ### 问题3:自然语言转换不准确 **现象**:生成的SQL不符合预期 **解决方案**: 1. 使用更具体的自然语言描述 2. 先查看表结构了解字段名 3. 使用 `raw_sql: true` 直接执行SQL **示例**: ```json // ❌ 模糊描述 { "query": "查用户", "database_id": "local-mysql" } // ✅ 具体描述 { "query": "查询users表中所有用户的姓名name和邮箱email字段", "database_id": "local-mysql" } ``` ### 问题4:OpenAI API调用失败 **现象**:自然语言查询返回错误 **解决方案**: 1. 检查API密钥是否正确 2. 确认账户余额充足 3. 检查网络连接 4. 使用 `raw_sql: true` 绕过API调用 ## 💡 最佳实践 ### 1. 查询优化 - 使用具体的字段名而非 `SELECT *` - 添加适当的 LIMIT 限制结果数量 - 使用索引字段进行查询条件 ### 2. 安全考虑 - 只授予数据库用户必要的权限 - 定期轮换密码和API密钥 - 在生产环境中限制查询权限 ### 3. 性能优化 - 启用查询缓存减少重复查询 - 合理设置最大结果数量 - 使用连接池管理数据库连接 ### 4. 调试技巧 - 使用 `LOG_LEVEL=debug` 查看详细日志 - 先用简单查询测试连接 - 逐步增加查询复杂度 ## 📚 相关文档 - [README.md](./README.md) - 项目总览和架构 - [ENV_SETUP.md](./ENV_SETUP.md) - 环境配置详解 - [config/](./config/) - 配置文件参考 --- **提示**: 这是一个 MCP (Model Context Protocol) 服务器,需要与支持 MCP 的客户端配合使用。推荐使用 Claude Desktop 或其他 MCP 兼容的工具。

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