Snowflake MCP协议服务器
一种模型上下文协议(MCP)服务器,为任何与MCP兼容的客户端提供对Snowflake数据库的访问,允许通过自动连接管理来执行SQL查询。
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"snowflake": {
"args": [
"C:\\Path\\To\\snowflake-mcp\\server.py"
],
"command": "C:\\Users\\YourUsername\\anaconda3\\python.exe"
},
"snowflake-docker": {
"args": [
"run",
"-i",
"snowflake-mcp"
],
"command": "docker",
"env": {
"SNOWFLAKE_ACCOUNT": "your_account",
"SNOWFLAKE_DATABASE": "your_database",
"SNOWFLAKE_PASSWORD": "your_password",
"SNOWFLAKE_USER": "your_username",
"SNOWFLAKE_WAREHOUSE": "your_warehouse"
}
}
}
}
该服务需要配置环境变量:SNOWFLAKE_ACCOUNT、SNOWFLAKE_DATABASE、SNOWFLAKE_PASSWORD、SNOWFLAKE_PRIVATE_KEY_FILE、SNOWFLAKE_PRIVATE_KEY_PASSPHRASE、SNOWFLAKE_USER、SNOWFLAKE_WAREHOUSE
服务介绍
Snowflake MCP 服务
这是一个 Model Context Protocol (MCP) 服务器,为任何兼容 MCP 的客户端提供访问 Snowflake 数据库的功能。
该服务器实现了 Model Context Protocol,允许任何 MCP 客户端:
- 在 Snowflake 数据库上执行 SQL 查询
- 自动处理数据库连接生命周期(连接、超时后重新连接、关闭)
- 处理查询结果和错误
- 安全地执行数据库操作
- 使用密码或密钥对进行身份验证
架构概述
什么是 MCP(Model Context Protocol)?
MCP 是一种标准协议,允许应用程序与 AI 模型和外部服务进行通信。它使 AI 模型能够访问超出其训练数据的工具和数据源,并通过标准化的通信接口扩展其功能。主要特点包括:
- 基于 stdio 通信(标准输入/输出)
- 结构化的工具定义和发现
- 标准化的工具调用机制
- 结构化的结果传输
系统组件
Snowflake-MCP 服务器由几个关键组件组成:
- MCP 服务器 - 中心组件,实现 MCP 协议并处理客户端请求
- Snowflake 连接管理器 - 管理数据库连接,包括创建、维护和清理
- 查询处理器 - 在 Snowflake 上执行 SQL 查询并处理结果
- 身份验证管理器 - 处理不同的身份验证方法(密码或私钥)
通信流程
系统通过以下通信流程工作:
- MCP 客户端(如 Claude 或其他兼容 MCP 的应用程序)向 MCP 服务器发送请求
- MCP 服务器使用
.env文件中的凭证与 Snowflake 进行身份验证 - MCP 服务器在 Snowflake 上执行 SQL 查询
- Snowflake 将结果返回给 MCP 服务器
- MCP 服务器格式化并将结果发送回 MCP 客户端
这种架构允许 AI 应用程序与 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
# Authentication - Choose one method
身份验证选项
此 MCP 服务器支持两种身份验证方法:
-
密码身份验证
SNOWFLAKE_PASSWORD=your_password # 您的 Snowflake 密码 -
密钥对身份验证
SNOWFLAKE_PRIVATE_KEY_FILE=/path/to/rsa_key.p8 # 私钥文件路径 SNOWFLAKE_PRIVATE_KEY_PASSPHRASE=your_passphrase # 可选:如果密钥已加密,则提供密码短语对于密钥对身份验证,您必须首先与 Snowflake 设置密钥对身份验证:
- 生成密钥对并将公钥注册到 Snowflake
- 将私钥文件安全地存储在您的机器上
- 在配置中提供私钥文件的完整路径
有关设置密钥对身份验证的说明,请参阅 Snowflake 关于密钥对身份验证的文档。
如果同时配置了两种身份验证方法,服务器将优先使用密钥对身份验证。
连接管理
服务器提供了自动连接管理功能:
-
自动连接初始化
- 当收到第一个查询时创建连接
- 验证连接参数
-
连接维护
- 跟踪连接状态
- 处理连接超时
- 如果连接丢失则自动重新连接
-
连接清理
- 在服务器停止时正确关闭连接
- 适当释放资源
使用方法
当与您的 MCP 客户端配置好后,服务器将自动启动。正常操作下不需要手动启动。一旦服务器运行起来,您的 MCP 客户端就能够执行 Snowflake 查询。
为了开发测试,您可以手动启动服务器:
python server.py
注意:正常使用时不需要手动启动服务器。MCP 客户端通常会根据配置来管理服务器的启动和关闭。
功能
- 安全的 Snowflake 数据库访问
- 灵活的身份验证(密码或密钥对身份验证)
- 强大的错误处理和报告
- 自动连接管理
- 查询执行和结果处理
- 兼容任何符合 MCP 标准的客户端
技术细节
核心组件
实现由几个关键类和模块组成:
- server.py - 包含 MCP 服务器实现的主要入口点。
- SnowflakeConnection - 处理所有 Snowflake 数据库操作的类,包括:
- 连接建立和重新连接
- 查询执行和事务管理
- 连接维护和清理
- SnowflakeMCPServer - 实现 MCP 协议的主要服务器类:
- 向 MCP 框架注册可用工具
- 处理来自客户端的工具调用请求
- 管理连接的生命周期
连接生命周期
连接生命周期被仔细管理以确保可靠性:
- 初始化 - 在收到第一个查询时延迟创建连接
- 验证 - 在尝试连接之前验证连接参数
- 监控 - 定期测试连接的有效性
- 恢复 - 如果连接丢失或超时,则自动重新连接
- 清理 - 服务器关闭时正确释放资源
MCP 工具接口
服务器向 MCP 客户端提供了以下工具:
- execute_query - 在 Snowflake 上执行 SQL 查询并返回结果
- 输入:SQL 查询字符串
- 输出:结构化格式的查询结果
此实现遵循了 MCP 协议实现和 Snowflake 数据库交互的最佳实践。
许可证
该项目在 MIT 许可证 下许可。有关详细信息,请参阅 LICENSE 文件。
版权所有 (c) 2025 David Amom