VOOZH about

URL: https://glama.ai/mcp/servers/davidamom/snowflake-mcp?locale=zh-CN

⇱ Snowflake MCP 服务 by davidamom | Glama


Snowflake MCP 服务

模型上下文协议 (MCP) 服务器,为任何兼容 MCP 的客户端提供对 Snowflake 数据库的访问。

👁 GitHub 仓库
👁 许可证:MIT

该服务器实现了模型上下文协议,以允许任何 MCP 客户端:

  • 在 Snowflake 数据库上执行 SQL 查询

  • 自动处理数据库连接生命周期(连接、超时重新连接、关闭)

  • 处理查询结果和错误

  • 安全地执行数据库操作

  • 使用密码或密钥对身份验证进行连接

架构概述

什么是 MCP(模型上下文协议)?

MCP 是一种标准协议,允许应用程序与 AI 模型和外部服务进行通信。它使 AI 模型能够访问训练数据以外的工具和数据源,从而通过标准化通信接口扩展其功能。主要功能包括:

  • 基于stdio通信(标准输入/输出)

  • 结构化工具定义和发现

  • 标准化工具调用机制

  • 结构化结果传输

系统组件

Snowflake-MCP 服务器由几个关键组件组成:

  1. MCP 服务器- 实现 MCP 协议并处理客户端请求的中央组件

  2. Snowflake 连接管理器- 管理数据库连接,包括创建、维护和清理

  3. 查询处理器——在 Snowflake 上执行 SQL 查询并处理结果

  4. 身份验证管理器- 处理不同的身份验证方法(密码或私钥)

👁 替代文本

通信流程

该系统通过以下通信流程工作:

  1. MCP 客户端(例如 Claude 或其他兼容 MCP 的应用程序)向 MCP 服务器发送请求

  2. MCP 服务器使用.env文件中的凭证向 Snowflake 进行身份验证

  3. MCP 服务器在 Snowflake 上执行 SQL 查询

  4. Snowflake 将结果返回给 MCP 服务器

  5. MCP 服务器格式化并将结果发送回 MCP 客户端

👁 替代文本

该架构允许AI应用程序和Snowflake数据库之间的无缝集成,同时保持安全性和高效的连接管理。

Related MCP server: MCP SQL Server

安装

  1. 克隆此存储库

git clone https://github.com/davidamom/snowflake-mcp.git
  1. 安装依赖项

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 :服务器脚本的完整路径。请根据您克隆存储库的位置进行修改。

不同操作系统的示例路径:

视窗:

{
 "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"]
 }
 }
}

雪花配置

在项目根目录下创建.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 服务器支持两种身份验证方法:

  1. 密码验证

    SNOWFLAKE_PASSWORD=your_password # Your Snowflake password
  2. 密钥对认证

    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 运行服务器。建议在生产环境中使用此方法,以确保在不同平台上的执行一致性。

  1. 构建 Docker 镜像:

docker build -t snowflake-mcp .
  1. 配置您的 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"
 }
 }
 }
}

注意: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_PRIVATE_KEY_FILE": "/app/rsa_key.p8"
 }
 }
 }
}

特征

  • 安全的 Snowflake 数据库访问

  • 灵活的身份验证(密码或密钥对身份验证)

  • 强大的错误处理和报告

  • 自动连接管理

  • 查询执行和结果处理

  • 与任何符合 MCP 标准的客户端兼容

技术细节

核心组件

该实现由几个关键的类和模块组成:

  • **server.py——**包含 MCP 服务器实现的主入口点。

  • SnowflakeConnection - 处理所有 Snowflake 数据库操作的类,包括:

    • 连接建立和重新连接

    • 查询执行和事务管理

    • 连接维护和清理

  • **SnowflakeMCPServer——**实现 MCP 协议的主服务器类:

    • 向 MCP 框架注册可用的工具

    • 处理来自客户端的工具调用请求

    • 管理连接的生命周期

连接生命周期

连接生命周期经过精心管理以确保可靠性:

  1. 初始化- 当收到第一个查询时,连接被延迟创建

  2. 验证- 在尝试连接之前验证连接参数

  3. 监控——定期测试连接的有效性

  4. 恢复- 如果连接丢失或超时,则自动重新连接

  5. 清理- 服务器关闭时正确释放资源

MCP 工具接口

服务器向 MCP 客户端公开以下工具:

  • 执行查询- 在 Snowflake 上执行 SQL 查询并返回结果

    • 输入:SQL 查询字符串

    • 输出:结构化格式的查询结果

  • export_to_csv - 在 Snowflake 上执行 SQL 查询并返回结果

    • 输入:SQL 查询字符串

    • 输出:导出的行数。输出文件的文件路径

此实现遵循 MCP 协议实现和 Snowflake 数据库交互的最佳实践。

执照

👁 许可证:MIT

本项目遵循MIT 许可证。详情请参阅LICENSE文件。

版权所有 (c) 2025 David Amom

A
license - permissive license
-
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/davidamom/snowflake-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server