Snowflake MCP服务
一个模型上下文协议(MCP)服务器,为任何兼容MCP的客户端提供访问Snowflake数据库的权限。
此服务器实现了模型上下文协议(Model Context Protocol),以便任何MCP客户端能够:
- 在Snowflake数据库上执行SQL查询
- 自动处理数据库连接的生命周期(连接、超时后重连、关闭)
- 处理查询结果和错误
- 安全地执行数据库操作
- 使用密码或密钥对认证进行连接
架构概述
什么是MCP(模型上下文协议)?
MCP是一种标准协议,允许应用程序与人工智能模型和外部服务进行通信。它使人工智能模型能够访问超出其训练数据范围的工具和数据源,通过标准化的通信接口扩展其功能。主要特性包括:
- 基于stdio通信(标准输入/输出)
- 结构化工具定义与发现
- 标准化工具调用机制
- 结构化结果传输
系统组件
Snowflake-MCP服务器由几个关键组件构成:
- MCP 服务器 - 实现MCP协议并处理客户端请求的核心组件
- Snowflake 连接管理器 - 管理数据库连接,包括创建、维护和清理
- 查询处理器 - 在Snowflake上执行SQL查询并处理结果
- 认证管理器 - 支持不同的认证方法(密码或私钥)
信息流/沟通流程
该系统通过以下通信流程工作:
- 一个MCP客户端(如Claude或其他MCP兼容应用程序)向MCP服务器发送请求
- MCP服务器使用来自(指定位置的)凭据对Snowflake进行身份验证
.env文件 - MCP服务器在Snowflake上执行SQL查询
- Snowflake 将结果返回给 MCP 服务器
- MCP服务器对结果进行格式化,并将其发送回MCP客户端
这种架构实现了人工智能应用与Snowflake数据库之间的无缝集成,同时确保了安全性和高效的连接管理。
安装
- 克隆此仓库
git clone https://github.com/davidamom/snowflake-mcp.git- 安装依赖项
pip install -r requirements.txt配置
MCP客户端配置示例
以下是Claude Desktop的一个示例配置,但此服务器可与任何MCP兼容的客户端配合使用。每个客户端可能有自己的配置方法:
{
"mcpServers": {
"snowflake": {
"command": "C:\\Users\\YourUsername\\path\\to\\python.exe",
"args": ["C:\\path\\to\\snowflake-mcp\\server.py"]
}
}
}配置参数:
command您Python解释器的完整路径。请根据您的Python安装位置修改此路径。args服务器脚本的完整路径。请根据您克隆仓库的位置修改此路径。
不同操作系统的示例路径:
Windows:
{
"mcpServers": {
"snowflake": {
"command": "C:\\Users\\YourUsername\\anaconda3\\python.exe",
"args": ["C:\\Path\\To\\snowflake-mcp\\server.py"]
}
}
}MacOS/Linux:
{
"mcpServers": {
"snowflake": {
"command": "/usr/bin/python3",
"args": ["/path/to/snowflake-mcp/server.py"]
}
}
}Snowflake 配置
创建一个 .env 在项目根目录中创建文件并添加以下配置:
# Snowflake Configuration - Basic Info
SNOWFLAKE_USER=your_username # Your Snowflake username
SNOWFLAKE_ACCOUNT=YourAccount.Region # Example: MyOrg.US-WEST-2
SNOWFLAKE_DATABASE=your_database # Your database
SNOWFLAKE_WAREHOUSE=your_warehouse # Your warehouse
SNOWFLAKE_ROLE=your_role # Your role
# Authentication - Choose one method认证选项
此MCP服务器支持两种认证方法:
- 密码认证
SNOWFLAKE_PASSWORD=your_password # Your Snowflake password- 密钥对认证
SNOWFLAKE_PRIVATE_KEY_FILE=/path/to/rsa_key.p8 # Path to private key file
SNOWFLAKE_PRIVATE_KEY_PASSPHRASE=your_passphrase # Optional: passphrase if key is encrypted对于密钥对认证,您必须首先在Snowflake中设置密钥对认证:
- 生成密钥对,并将公钥注册到Snowflake - 在您的机器上安全地存储私钥文件 - 在配置中提供私钥文件的完整路径
如需设置密钥对认证的说明,请参阅 Snowflake关于密钥对认证的文档。
如果配置了两种认证方法,服务器将优先使用密钥对认证。
连接管理
服务器提供自动连接管理功能:
- 自动连接初始化
- 在首次接收到查询时建立连接 - 验证连接参数
- 连接维护
- 跟踪连接状态 - 处理连接超时 - 如果连接丢失,将自动重新连接
- 连接清理
- 当服务器停止时,正确关闭连接 - 适当地释放资源
使用方法
标准用法
当您的MCP客户端进行配置后,服务器将自动启动。在正常运行过程中,无需手动启动。一旦服务器运行起来,您的MCP客户端将能够执行Snowflake查询。
对于开发测试,您可以使用以下命令手动启动服务器:
python server.py注:正常使用时无需手动启动服务器。MCP客户端通常会根据配置管理服务器的启动和关闭。
Docker 使用方法
你也可以使用 Docker 来运行服务器。这种方法建议用于生产环境,以确保在不同平台上的执行一致性。
- 构建Docker镜像:
docker build -t snowflake-mcp .- 配置您的MCP客户端以使用Docker。配置示例:
{
"mcpServers": {
"snowflake-docker": {
"command": "docker",
"args": [
"run",
"-i",
"snowflake-mcp"
],
"env": {
"SNOWFLAKE_USER": "your_username",
"SNOWFLAKE_ACCOUNT": "your_account",
"SNOWFLAKE_DATABASE": "your_database",
"SNOWFLAKE_WAREHOUSE": "your_warehouse",
"SNOWFLAKE_PASSWORD": "your_password",
"SNOWFLAKE_ROLE": "your_role"
}
}
}
}注:Docker 实现使用 stdio 进行通信,因此无需暴露端口。
如果在使用 Docker 时采用密钥对认证,您需要挂载您的私钥文件:
docker run -i -v /path/to/your/key.p8:/app/rsa_key.p8:ro snowflake-mcp并相应地更新您的配置:
{
"mcpServers": {
"Snowflake-Docker": {
"command": "docker",
"args": [
"run",
"-i",
"-v",
"/path/to/your/key.p8:/app/rsa_key.p8:ro",
//optional
"-v",
"/path/to/export/dir/:/export/"
"snowflake-mcp"
],
"env": {
"SNOWFLAKE_USER": "your_username",
"SNOWFLAKE_ACCOUNT": "your_account",
"SNOWFLAKE_DATABASE": "your_database",
"SNOWFLAKE_WAREHOUSE": "your_warehouse",
"SNOWFLAKE_ROLE": "your_role",
"SNOWFLAKE_PRIVATE_KEY_FILE": "path_for_your_private_key",
"SNOWFLAKE_PRIVATE_KEY_PASSPHRASE": "your_password_for_private_key"
}
}
}
}特点/功能
- 确保Snowflake数据库访问安全
- 灵活的认证方式(密码或密钥对认证)
- 强大的错误处理和报告功能
- 自动连接管理
- 查询执行和结果处理
- 兼容任何符合MCP标准的客户端
技术细节
核心组件
实现过程包括几个关键的类和模块:
- server.py 翻译成中文是“服务器.py”或保持原名(因为“server.py”在中文语境下通常直接使用,表示一个名为“server”的Python脚本文件)。如果要更具体地描述其用途,可能会说“服务器端Python脚本文件”或“服务器程序(Python)”,但直接翻译“server.py”为“服务器.py”已足够清晰 - 包含MCP服务器实现的主要入口点。
- Snowflake 连接 - 处理所有Snowflake数据库操作的类,包括:
- 连接建立和重新连接 - 查询执行和事务管理 - 连接维护和清理
- Snowflake MCP 服务器 - 实现MCP协议的主要服务器类:
- 在MCP框架中注册可用工具 - 处理来自客户端的工具调用请求 - 管理连接的生命周期
连接生命周期
连接生命周期经过精心管理,以确保可靠性:
- 初始化 - 当接收到第一个查询时,才会按需创建连接
- 验证 - 在尝试连接之前,会对连接参数进行验证
- 监测 - 定期测试连接的有效性
- 恢复 - 如果连接丢失或超时,则自动重新连接
- 清理 - 服务器关闭时正确释放资源
MCP工具接口
服务器向MCP客户端提供了以下工具:
- 执行查询 - 在Snowflake上执行SQL查询并返回结果
- 输入:SQL 查询字符串 - 输出:以结构化格式呈现查询结果
- 导出为CSV文件 - 在Snowflake上执行SQL查询并返回结果
- 输入:SQL 查询字符串 - 输出:导出的行数。输出文件的文件路径
此实现遵循了MCP协议实现和Snowflake数据库交互的最佳实践。
许可证

这个项目遵循以下许可协议: 麻省理工学院许可证(MIT License). 查看 许可证 文件中有详细信息。
版权所有 (c) 2025 David Amom

