关于 MCP Server for Snowflake
面向 Snowflake 数据库的只读 MCP 服务,可供 Claude 等客户端查询数据。支持多数据库视图查询,并通过只读校验和结果行数限制保护数据。
主要功能
- 01私钥与浏览器认证
- 02连接池及后台刷新
- 03跨数据库和视图查询
- 04支持多种只读 SQL
- 05限制结果行数
适用场景
- 01盘点可访问的数据库和视图
- 02查看视图列与 SQL 定义
- 03查询视图并分析结果
- 04执行受限的只读 SQL
MCP 相关
该服务通过 MCP 向客户端提供 Snowflake 数据库、视图描述和只读查询工具。支持 stdio 传输,可连接 Claude Desktop 等 MCP 客户端。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Snowflake MCP 服务
一个用于对 Snowflake 数据库执行只读操作的模型上下文协议(MCP)服务。此工具可让 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 包管理器(推荐)
步骤
-
克隆此仓库:
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 运行
安装软件包后,可以直接运行服务:
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 Desktop
-
在 Claude Desktop 中,前往“设置” →“MCP 服务”
-
添加新服务,并填写 uv 可执行文件的完整路径:
"snowflake-mcp-server": { "command": "uv", "args": [ "--directory", "/<path-to-code>/snowflake-mcp-server", "run", "snowflake-mcp" ] }或明确指定 Stdio 传输方式:
"snowflake-mcp-server": { "command": "uv", "args": [ "--directory", "/<path-to-code>/snowflake-mcp-server", "run", "snowflake-mcp-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 配置示例:
# Set connection to refresh every 4 hours
SNOWFLAKE_CONN_REFRESH_HOURS=4
身份验证方式
私钥身份验证
此方法使用服务账户和私钥进行非交互式身份验证,适用于自动化流程。
- 按照 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 文件已配置为排除此文件。
开发
静态类型检查
mypy mcp_server_snowflake/
代码检查
ruff check .
格式化
ruff format .
运行测试
pytest
贡献
欢迎贡献!请随时提交 Pull Request。
技术详情
此项目使用:
- Snowflake Connector Python 连接 Snowflake
- MCP(Model Context Protocol) 与 Claude 交互
- Pydantic 进行数据验证
- python-dotenv 管理环境变量
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。