DataPilot MCP 服务器是一个全面的模型上下文协议(MCP)服务器,借助自然语言和人工智能与 Snowflake 进行交互。它基于 FastMCP 2.0 构建,并集成了 OpenAI,能在人工智能的引导下帮助你更好地管理数据。
如果你想开始使用 DataPilot MCP Server,可按以下步骤操作:
git clone
cd datapilot
python -m venv venv
source venv/bin/activate # 在 Windows 系统上使用:venv\Scripts\activate
pip install -r requirements.txt
cp env.template .env
# 编辑 .env 文件并填入你的凭证信息
snowflake://databases - 访问数据库列表snowflake://schemas/{database} - 访问模式列表snowflake://tables/{database}/{schema} - 访问表列表snowflake://table/{database}/{schema}/{table} - 访问表详细信息创建一个 .env 文件,并进行如下配置:
# 必需:Snowflake 连接
# 账户示例:
# - ACCOUNT-LOCATOR.snowflakecomputing.com(推荐)
# - ACCOUNT-LOCATOR.region.cloud
# - organization-account_name
SNOWFLAKE_ACCOUNT=ACCOUNT-LOCATOR.snowflakecomputing.com
SNOWFLAKE_USER=your_username
SNOWFLAKE_PASSWORD=your_password
# 可选:默认 Snowflake 上下文
SNOWFLAKE_WAREHOUSE=your_warehouse_name
SNOWFLAKE_DATABASE=your_database_name
SNOWFLAKE_SCHEMA=your_schema_name
SNOWFLAKE_ROLE=your_role_name
# 必需:OpenAI API
OPENAI_API_KEY=your_openai_api_key
OPENAI_MODEL=gpt-4 # 可选,默认为 gpt-4
ACCOUNT-LOCATOR.snowflakecomputing.com(例如,SCGEENJ-UR66679.snowflakecomputing.com)ACCOUNT-LOCATOR.region.cloud(例如,xy12345.us-east-1.aws)organization-account_nameUSAGE 权限SELECT 权限以进行查询SHOW 权限python -m src.main
fastmcp run src/main.py
fastmcp dev src/main.py
在你的 Claude 桌面版配置中添加以下内容:
{
"mcpServers": {
"datapilot": {
"command": "python",
"args": ["-m", "src.main"],
"cwd": "/path/to/datapilot",
"env": {
"SNOWFLAKE_ACCOUNT": "your_account",
"SNOWFLAKE_USER": "your_user",
"SNOWFLAKE_PASSWORD": "your_password",
"OPENAI_API_KEY": "your_openai_key"
}
}
}
}
from fastmcp import Client
async def main():
async with Client("python -m src.main") as client:
# 列出数据库
databases = await client.call_tool("list_databases")
print("Databases:", databases)
# 自然语言转 SQL
result = await client.call_tool("natural_language_to_sql", {
"question": "Show me the top 10 customers by revenue",
"database": "SALES_DB",
"schema": "PUBLIC"
})
print("Generated SQL:", result)
# 用自然语言提出问题
question = "What are the top 5 products by sales volume last month?"
sql = await client.call_tool("natural_language_to_sql", {
"question": question,
"database": "SALES_DB",
"schema": "PUBLIC"
})
print(f"Generated SQL: {sql}")
# 执行查询并进行人工智能分析
analysis = await client.call_tool("analyze_query_results", {
"query": "SELECT product_name, SUM(quantity) as total_sales FROM sales GROUP BY product_name ORDER BY total_sales DESC LIMIT 10",
"results_limit": 100,
"analysis_type": "summary"
})
print(f"Analysis: {analysis}")
# 获取关于表的人工智能见解
insights = await client.call_tool("generate_table_insights", {
"table_name": "SALES_DB.PUBLIC.CUSTOMERS",
"sample_limit": 50
})
print(f"Table insights: {insights}")
# 获取优化建议
optimizations = await client.call_tool("suggest_query_optimizations", {
"query": "SELECT * FROM large_table WHERE date_column > '2023-01-01'"
})
print(f"Optimization suggestions: {optimizations}")
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ MCP Client │ │ FastMCP │ │ Snowflake │
│ (Claude/etc) │◄──►│ Server │◄──►│ Database │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ OpenAI API │
│ (GPT-4) │
└─────────────────┘
datapilot/
├── src/
│ ├── __init__.py
│ ├── main.py # 主 FastMCP 服务器
│ ├── models.py # Pydantic 数据模型
│ ├── snowflake_client.py # Snowflake 连接和操作
│ └── openai_client.py # OpenAI 集成
├── requirements.txt # Python 依赖项
├── env.template # 环境变量模板
└── README.md # 本文件
src/main.py 中定义你的工具函数:@mcp.tool()
async def my_new_tool(param: str, ctx: Context) -> str:
"""工具功能描述"""
await ctx.info(f"Processing: {param}")
# 你的逻辑代码
return "result"
fastmcp dev src/main.py@mcp.resource("snowflake://my-resource/{param}")
async def my_resource(param: str) -> Dict[str, Any]:
"""资源描述"""
# 你的逻辑代码
return {"data": "value"}
.env 文件中的 Snowflake 凭证OPENAI_API_KEY 是否设置正确pip install -r requirements.txt启用调试日志:
LOG_LEVEL=DEBUG
本项目采用 MIT 许可证。
如果你遇到问题或有疑问,可以: