🤖 人工智能数据分析师——MCP服务器
基于AI的数据分析服务器 模型上下文协议(MCP) 使用 FastMCP为AI代理提供了一个丰富、标准化的工具集,用于连接数据库、探索模式、执行安全的SQL查询、配置数据、生成交互式可视化和管理数据集——所有这些都可以通过一个一致的界面完成。
______________________________________________________________________
📋 目录
______________________________________________________________________
✨ 特性
| 特性 | 描述 |
|---|---|
| 数据库连接 | 连接到任何SQLAlchemy支持的数据库——SQLite、PostgreSQL、MySQL、MSSQL等 |
| 模式探索 | 使用单个工具调用检查表、列、主键、外键和索引 |
| 安全SQL执行 | 只读查询验证在所有破坏性操作到达数据库之前阻止它们 |
| 数据剖析 | 自动按列统计:空率、唯一计数、最小/最大值、平均值和最大值 |
| 智能图表生成 | 自动检测最佳图表类型和聚合;输出交互式Plotly可视化 |
| 数据集上传 | 将CSV、Excel和JSON文件直接导入为完全可查询的SQL表 |
| 会话管理 | 独立的、按会话的数据库引擎和缓存使并发分析保持独立 |
| 缓存 | 用于模式、配置文件和分析结果的5分钟TTL内存缓存 |
______________________________________________________________________
🗂 项目结构
ai-analyst/
├── server.py # FastMCP server entry point & tool registration
├── create_test_db.py # Generates a sample SQLite e-commerce database
│
├── database/
│ ├── connection_manager.py # SQLAlchemy connection management (singleton)
│ └── schema_loader.py # Schema inspection & caching
│
├── datasets/
│ └── dataset_manager.py # CSV / Excel / JSON upload & query engine
│
├── security/
│ └── sql_validator.py # SQL whitelist validator (SELECT / WITH only)
│
├── tools/
│ ├── analyze_schema.py # Schema relationship analysis tool
│ ├── connect_database.py # Database connection tool
│ ├── dataset_tools.py # Dataset upload / list / query tools
│ ├── generate_chart.py # Chart generation tool
│ ├── get_schema.py # Schema fetching tool
│ ├── get_schema2.py # Schema fetching — plain-text format (optional)
│ ├── profile_table.py # Data profiling tool
│ ├── run_query.py # SQL query execution tool
│ ├── sample_rows.py # Table row sampling tool
│ └── session_tools.py # Session creation tool
│
├── utils/
│ ├── cache_manager.py # In-memory TTL cache
│ ├── chart_utils.py # Plotly chart creation & auto-detection
│ ├── data_profiler.py # SQL / pandas data profiling engine
│ ├── generate_chart.py # Chart generation wrapper
│ ├── schema_analyzer.py # Relationship & index analysis
│ ├── session_manager.py # UUID session management (singleton)
│ └── sql_generator.py # LLM-based SQL generation
│
└── logs/ # Runtime log files______________________________________________________________________
🛠 先决条件
- Python 3.11
______________________________________________________________________
📦 安装
1.克隆存储库
git clone
cd ai-analyst2.创建并激活虚拟环境
python -m venv venv
# macOS / Linux
source venv/bin/activate
# Windows
venv\Scripts\activate3.安装依赖项
pip install -r requirements.txt______________________________________________________________________
🚀 快速开始
(可选)生成示例数据库
python create_test_db.py创建 sample_store.db --一个随时可以查询的SQLite电子商务数据库,其中包含 customers, products, orders,以及 order_items 表,预加载了示例数据。
启动MCP服务器
python server.py______________________________________________________________________
🖥 添加到Claude桌面
- 打开 克劳德桌面版 并前往 设置→ 开发者
- 点击 编辑配置 打开
claude_desktop_config.json - 在内部添加以下条目
"mcpServers":
"AI Data Analyst MCP Server": {
"command": "
",
"args": [
"
/server.py"
],
"env": {},
"transport": "stdio"
}🖥 添加到您自己的聊天机器人
SERVERS = {
"AI Data Analyst MCP Server": {
"command": "
",
"args": [
"
/server.py"
],
"env": {},
"transport": "stdio"
}
}
在聊天机器人代码中,初始化客户端:
from langchain_mcp_adapters.client import MultiServerMCPClient
client = MultiServerMCPClient (SERVERS)添加聊天机器人的llm工具:
tools = client.get_tools()
llm_with_tools = llm.bind_tools(tools)现在,您的聊天机器人可以调用中定义的任何MCP工具 server.py!
替换占位符值:
| 占位符 | 示例 |
|---|---|
| ` | |
| ` | C:\Users\you\ai-analyst\venv\Scripts\python.exe (Windows)或 /home/you/ai-analyst/venv/bin/python (macOS/Linux) |
| ` | |
| ` | C:\Users\you\ai-analyst 或 /home/you/ai-analyst |
- 保存 文件和 重新启动 克劳德桌面。
______________________________________________________________________
🔧 MCP工具参考
| 工具 | 说明 |
|---|---|
hello | 健康检查--确认服务器正在运行 |
create_session | 创建新的隔离分析会话 |
connect_database_tool | 使用SQLAlchemy URI连接到数据库 |
get_schema | 检索连接数据库的表和列架构 |
sample_rows_tool | 从指定表中采样最多50行 |
run_query_tool | 执行经过验证的只读SQL查询 |
profile_table | 为表生成列级统计信息 |
analyze_schema | 检测表关系、键和索引 |
generate_chart_tool | 创建具有自动类型检测功能的交互式Plotly图表 |
upload_dataset | 上传CSV、Excel或JSON文件作为可查询的SQL表 |
list_datasets | 列出当前会话中上传的所有数据集 |
query_dataset | 对以前上传的数据集运行SQL |
______________________________________________________________________
🗄 支持的数据库
使用标准URI连接到任何与SQLAlchemy兼容的数据库:
# SQLite
sqlite:///path/to/database.db
# PostgreSQL
postgresql://user:password@host:port/dbname
# MySQL
mysql://user:password@host:port/dbname
# Microsoft SQL Server
mssql+pyodbc://user:password@host/dbname?driver=ODBC+Driver+17+for+SQL+Server______________________________________________________________________
🔒 安全
服务器强制执行严格的只读SQL以保护您的数据。
允许的声明
SELECTWITH(通用表表达式/CTE)
被屏蔽的关键字
DROP · DELETE · UPDATE · ALTER · INSERT · TRUNCATE · MERGE · GRANT · REVOKE
附加保护
- 多语句查询(
;-被彻底拒绝 - 验证不区分大小写,并使用正则表达式单词边界来防止绕过尝试
______________________________________________________________________
📄 许可证
本项目提供 按原样 用于教育和研究目的。
