MCP Server for Snowflake
一个基于 Model Context Protocol (MCP) 的服务器,用于对 Snowflake 数据库执行只读操作。该工具使 Claude 能够安全地查询 Snowflake 数据,而无需修改任何信息。
功能
- 灵活的 Snowflake 认证方式,支持以下两种:
- 使用私钥的服务账号认证
- 交互式会话的外部浏览器认证
- 连接池与自动后台刷新,以保持持久连接
- 支持在单个会话中查询多个视图和数据库
- 支持多种 SQL 语句类型(SELECT、SHOW、DESCRIBE、EXPLAIN、WITH)
- 兼容 MCP 的处理器,用于查询 Snowflake 数据
- 只读操作,包含安全检查以防止数据修改
- 支持 Python 3.12 及以上版本
- 基于 Stdio 的 MCP 服务器,便于与 Claude Desktop 集成
可用工具
服务器提供以下工具用于查询 Snowflake:
- list_databases:列出所有可访问的 Snowflake 数据库
- list_views:列出指定数据库和模式中的所有视图
- describe_view:获取特定视图的详细信息,包括列和 SQL 定义
- query_view:从视图中查询数据,可选行数限制
- execute_query:执行自定义只读 SQL 查询(SELECT、SHOW、DESCRIBE、EXPLAIN、WITH),结果以 Markdown 表格格式返回
安装
前提条件
- Python 3.12 或更高版本
- 一个 Snowflake 账户,需具备以下之一:
- 已配置的服务账号(用户名 + 私钥),或
- 用于浏览器认证的普通用户账户
- uv 包管理器(推荐)
步骤
- 克隆本仓库:
- 安装包:
- 创建
.env
文件并填写 Snowflake 凭证:
根据您偏好的认证方式选择提供的示例文件之一:
私钥认证:
然后编辑
.env
文件,设置您的 Snowflake 账户详情和私钥路径。外部浏览器认证:
然后编辑
.env
文件,设置您的 Snowflake 账户详情。使用
使用 uv 运行
安装包后,您可以直接运行服务器:
这将启动基于 stdio 的 MCP 服务器,可与 Claude Desktop 或任何支持 stdio 通信的 MCP 客户端连接。
使用外部浏览器认证时,浏览器窗口将自动打开,提示您登录 Snowflake 账户。
Claude Desktop 集成
- 在 Claude Desktop 中,进入 Settings → MCP Servers
- 添加新服务器,指定 uv 可执行文件的完整路径:
或者明确指定 stdio 传输:
- 您可以通过在终端运行
which uv
找到 uv 路径
- 保存服务器配置
示例查询
与 Claude 配合使用时,您可以提出以下问题:
- "你能列出我的 Snowflake 账户中的所有数据库吗?"
- "列出 MARKETING 数据库中的所有视图"
- "描述 SALES 数据库中 CUSTOMER_ANALYTICS 视图的结构"
- "显示 FINANCE 数据库中 REVENUE_BY_REGION 视图的示例数据"
- "运行以下 SQL 查询:SELECT customer_id, SUM(order_total) as total_spend FROM SALES.ORDERS GROUP BY customer_id ORDER BY total_spend DESC LIMIT 10"
- "查询 MARKETING 数据库,找出按转化率排名的前 5 个表现最佳的广告活动"
- "通过查询 SALES.CUSTOMER_METRICS 和 MARKETING.CAMPAIGN_RESULTS 比较不同数据库中的数据"
配置
连接池行为可以通过环境变量配置:
SNOWFLAKE_CONN_REFRESH_HOURS
:连接刷新的时间间隔(单位:小时,默认:8)
示例
.env
配置:认证方式
私钥认证
此方法使用服务账号和私钥进行非交互式认证,适用于自动化流程。
- 按照 Snowflake 文档 为您的 Snowflake 用户创建密钥对
- 在
.env
文件中设置SNOWFLAKE_AUTH_TYPE=private_key
- 在
SNOWFLAKE_PRIVATE_KEY_PATH
中提供私钥路径
外部浏览器认证
此方法会打开浏览器窗口进行交互式认证。
- 在
.env
文件中设置SNOWFLAKE_AUTH_TYPE=external_browser
- 启动服务器时,浏览器窗口将自动打开,要求您登录
- 认证后,会话将保持活跃,直到您的 Snowflake 账户设置中指定的时间结束
安全注意事项
本服务器:
- 强制执行只读操作(仅允许 SELECT、SHOW、DESCRIBE、EXPLAIN 和 WITH 语句)
- 自动添加 LIMIT 子句以防止返回过大结果集
- 使用安全的认证方法与 Snowflake 建立连接
- 验证输入以防止 SQL 注入
⚠️ 重要提示:请妥善保管您的
.env
文件,切勿将其提交到版本控制中。.gitignore
文件已配置为排除它。开发
静态类型检查
代码检查
代码格式化
运行测试
贡献
欢迎贡献!请随时提交 Pull Request。
技术细节
本项目使用:
- Snowflake Connector Python 用于连接 Snowflake
- MCP (Model Context Protocol) 用于与 Claude 交互
- Pydantic 用于数据验证
- python-dotenv 用于环境变量管理
- Author:waytomcp
- URL:https://www.waytomcp.com/article/dynamike/snowflake-mcp-server
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!