使用说明
MCP数据分析师
一个模型上下文协议(MCP)服务器,支持使用人工智能对SQL数据库进行自然语言查询。连接您的数据库并用简单的英语提问-服务器将为您生成并执行SQL查询。
特性
- 🤖 自然语言转SQL:用简单的英语提问,获取SQL结果
- 🔌 多数据库支持MySQL、PostgreSQL、MSSQL、MongoDB、SQLite、SSAS(MDX)、Elasticsearch(SQL)、InfluxDB(InfluxQL)
- 📊 架构自动发现:自动扫描和缓存数据库架构
- 🛠️ MCP集成:与MCP兼容的客户端无缝协作
- ⚡ 高效:连接池和模式缓存以提高性能
- 🔒 按设计只读:只执行SELECT样式的查询
查询语言
- 结构化查询语言:MySQL、PostgreSQL、MSSQL、SQLite、Elasticsearch(SQL API)
- MDX:SSAS
- InfluxQL:InfluxDB
安装
先决条件
- Python 3.12或更高版本
- MySQL、PostgreSQL、MSSQL、MongoDB、SQLite、SSAS、Elasticsearch或InfluxDB之一
- OpenAI API密钥(或兼容的API端点)
设置
-
克隆存储库:
cd /path/to/your/workspace -
创建虚拟环境 (推荐):
python3 -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate -
安装依赖项:
pip install -r requirements.txt -
配置环境变量:
复制下面的示例并创建
.env文件:# LLM Configuration LLM_API_KEY=your-api-key-here LLM_MODEL=gpt-3.5-turbo LLM_API_URL=https://api.openai.com/v1
数据库配置
DB_TYPE=mysql#mysql|postgresql|mssql|mongodb|sqlite|ssas|elasticsearch|influexdb DB_HOST=127.0.0.1 DB_PORT=3306#5432(PostgreSQL)、1433(MSSQL)、27017(MongoDB)、2383(SSAS)、9200(Elasticsearch)、8086(InfluxDB) DB_USER=根 DB_PASSWORD=您的密码 DB_NAME=您的数据库名称#对于InfluxDB:数据库名称;对于SSAS/Elasticsearch:目录/索引数据库名称
仅限SQLite
DB_PATH=数据库.DB
## Usage
### Running the MCP Server
Start the server using the standard MCP stdio transport:
```bash
python server.py
服务器将:
- 验证配置
- 连接到您的数据库
- 构建架构缓存
- 开始监听MCP请求
可用的MCP工具
服务器公开了MCP客户端可以调用的3个工具:
1. query_database_with_prompt
用自然语言提问并获得SQL结果。
# Example: "Show me the top 5 customers by total purchases"
{
"success": true,
"query": "SELECT c.name, SUM(o.total) as total_purchases FROM customers c...",
"data": [...]
}
2. get_database_schema
检索完整的数据库架构。
{
"success": true,
"schema": {
"users": {
"name": "users",
"columns": {...}
}
}
}
3. build_db_definition
从数据库重建架构缓存。
{
"success": true,
"message": "Successfully loaded schema for 8 tables",
"tables": ["users", "orders", "products", ...]
}
与MCP客户端集成
要将此服务器与MCP客户端(如Claude Desktop)一起使用,请将其添加到MCP配置中:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
视窗: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"data-analyst": {
"command": "python",
"args": ["/path/to/mcp-data-analyst/server.py"],
"env": {
"LLM_API_KEY": "your-key",
"DB_TYPE": "mysql",
"DB_HOST": "localhost",
"DB_NAME": "your_db"
}
}
}
}
发展
添加新的数据库类型
- 在中创建新文件
DataAnalyst/database/Type/(例如。,SQLite.py) - 扩展
BaseDatabase抽象类 - 实施所有必需的方法:
__init__,execute_query,build_definition,close - 将新类型添加到
DbTypes枚举 - 更新
DataAnalyst/database/Type/__init__.py导出您的类 - 更新
server.py处理新的数据库类型
示例
示例1:客户分析
Query: "Show me the top 10 customers by total order value"
Generated SQL:
SELECT c.customer_name, SUM(o.total_amount) as total_value
FROM customers c
JOIN orders o ON c.id = o.customer_id
GROUP BY c.id, c.customer_name
ORDER BY total_value DESC
LIMIT 10;
示例2:产品库存
Query: "Which products are low in stock (less than 10 units)?"
Generated SQL:
SELECT product_name, quantity_in_stock
FROM products
WHERE quantity_in_stock < 10
ORDER BY quantity_in_stock ASC;
贡献
欢迎投稿!请确保:
- 代码遵循PEP 8风格指南
- 所有函数都有类型提示和文档字符串
- 新的数据库类型扩展
BaseDatabase - 更改保持向后兼容性
支持
对于问题、疑问或贡献,请在存储库上打开问题。
内置于: