雪花MCP服务器
用于对Snowflake数据库执行只读操作的模型上下文协议(MCP)服务器。此工具使Claude能够安全地查询Snowflake数据,而无需修改任何信息。
特性
- 使用以下任一方式对Snowflake进行灵活的身份验证:
- 使用私钥进行服务帐户身份验证 - 交互式会话的外部浏览器身份验证
- 具有自动后台刷新功能的连接池,以维护持久连接
- 支持在单个会话中查询多个视图和数据库
- 支持多种SQL语句类型(SELECT、SHOW、DESCRIBE、EXPLAIN、WITH)
- 用于查询雪花数据的MCP兼容处理程序
- 具有安全检查的只读操作,以防止数据修改
- 支持Python 3.12+
- 基于Stdio的MCP服务器,便于与Claude Desktop集成
可用工具
服务器提供以下工具用于查询Snowflake:
- 列表_数据库:列出所有可访问的Snowflake数据库
- list_views:列出指定数据库和架构中的所有视图
- describeview:获取特定视图的详细信息,包括列和SQL定义
- 查询视图:从具有可选行限制的视图中查询数据
- execute_query:执行自定义只读SQL查询(SELECT、SHOW、DESCRIBE、EXPLAIN、WITH),结果格式为markdown表
安装
先决条件
- Python 3.12或更高版本
- Snowflake帐户具有以下任一功能:
- 配置的服务帐户(用户名+私钥),或 - 用于基于浏览器的身份验证的常规用户帐户
- 紫外线 包管理器(推荐)
步骤
- 克隆此存储库:
git clone https://github.com/yourusername/snowflake-mcp-server.git
cd snowflake-mcp-server- 安装软件包:
uv pip install -e .- 创建一个
.env使用Snowflake凭据创建文件:
根据您首选的身份验证方法选择提供的示例文件之一:
用于私钥身份验证:
cp .env.private_key.example .env然后编辑 .env 文件来设置您的Snowflake帐户详细信息和私钥路径。
用于外部浏览器身份验证:
cp .env.browser.example .env然后编辑 .env 文件来设置您的Snowflake帐户详细信息。
用法
用紫外线跑步
安装软件包后,您可以直接使用以下命令运行服务器:
uv run snowflake-mcp
# Or you can be explicit about using stdio transport
uv run snowflake-mcp-stdio这将启动基于stdio的MCP服务器,该服务器可以连接到Claude Desktop或任何支持stdio通信的MCP客户端。
使用外部浏览器身份验证时,浏览器窗口将自动打开,提示您登录Snowflake帐户。
Claude桌面集成
- 在Claude Desktop中,转到设置→ MCP服务器
- 使用uv可执行文件的完整路径添加一个新服务器:
"snowflake-mcp-server": {
"command": "uv",
"args": [
"--directory",
"/
/snowflake-mcp-server",
"run",
"snowflake-mcp"
]
}或者明确指定stdio传输:
"snowflake-mcp-server": {
"command": "uv",
"args": [
"--directory",
"/
/snowflake-mcp-server",
"run",
"snowflake-mcp-stdio"
]
}- 你可以通过跑步找到你的紫外线路径
which uv在您的终端
- 保存服务器配置
查询示例
与Claude一起使用时,您可以提出以下问题:
- “你能列出我Snowflake帐户中的所有数据库吗?”
- “列出MARKETING数据库中的所有视图”
- “描述销售数据库中CUSTOMER_ANALYTICS视图的结构”
- “显示FINANCE数据库中REVENUE_BY_REGION视图中的示例数据”
- “运行此SQL查询:选择customer_id,SUM(order_total)作为SALES.ORDERS GROUP BY customer_id order BY total_spend DESC限制10”
- “查询MARKETING数据库,按转化率找到表现最佳的5个活动”
- “通过查询SALES.CUSTOMER_METRICS和MARKETING.CAMPAIGN_RESULTS,比较不同数据库中视图的数据”
配置
连接池行为可以通过环境变量进行配置:
SNOWFLAKE_CONN_REFRESH_HOURS:连接刷新之间的时间间隔(以小时为单位)(默认值:8)
示例 .env 配置:
# Set connection to refresh every 4 hours
SNOWFLAKE_CONN_REFRESH_HOURS=4身份验证方法
私钥认证
此方法使用服务帐户和私钥进行非交互式身份验证,非常适合自动化流程。
- 按照以下步骤为Snowflake用户创建密钥对 雪花文档
- 集
SNOWFLAKE_AUTH_TYPE=private_key在你的.env文件 - 在中提供私钥的路径
SNOWFLAKE_PRIVATE_KEY_PATH
外部浏览器身份验证
此方法打开一个浏览器窗口进行交互式身份验证。
- 集
SNOWFLAKE_AUTH_TYPE=external_browser在你的.env文件 - 启动服务器时,将打开一个浏览器窗口,要求您登录
- 身份验证后,会话将在Snowflake帐户设置指定的持续时间内保持活动状态
安全考虑
此服务器:
- 强制执行只读操作(只允许SELECT、SHOW、DESCRIBE、EXPLAIN和WITH语句)
- 自动添加LIMIT子句以防止大型结果集
- 使用安全身份验证方法连接到Snowflake
- 验证输入以防止SQL注入
⚠️ 重要:保持你的 .env 文件安全,永远不要将其提交给版本控制。这 .gitignore 文件被配置为排除它。
发展
静态类型检查
mypy mcp_server_snowflake/掉毛
ruff check .格式化
ruff format .运行测试
pytest贡献
欢迎投稿!请随时提交拉取请求。
技术细节
本项目使用:
- Snowflake连接器Python 用于连接Snowflake
- MCP(模型上下文协议) 与克劳德互动
- 派丹蒂克 用于数据验证
- python dotenv 环境变量管理
