返回市场
雪花-MCP

雪花-MCP

作者:davidamom4 星标更新:2025-09-25

项目介绍

Snowflake MCP服务

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

GitHub仓库 许可证:MIT

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

  • 在Snowflake数据库上执行SQL查询
  • 自动处理数据库连接生命周期(连接、超时重连、关闭)
  • 处理查询结果和错误
  • 安全地执行数据库操作
  • 使用密码或密钥对身份验证进行连接

架构概述

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

MCP是一种标准协议,允许应用程序与AI模型和外部服务通信。它使AI模型能够访问超出其训练数据的工具和数据源,通过标准化的通信接口扩展其能力。关键特性包括:

  • 基于标准输入/输出(stdio)通信
  • 结构化的工具定义和发现
  • 标准化的工具调用机制
  • 结构化的结果传输

系统组件

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

  1. MCP服务器 - 中心组件,实现MCP协议并处理客户端请求
  2. Snowflake连接管理器 - 管理数据库连接,包括创建、维护和清理
  3. 查询处理器 - 在Snowflake上执行SQL查询并处理结果
  4. 认证管理器 - 处理不同的认证方法(密码或私钥)

alt text

通信流程

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

  1. 一个MCP客户端(如Claude或其他兼容MCP的应用程序)向MCP服务器发送请求
  2. MCP服务器使用来自.env文件的凭证与Snowflake进行身份验证
  3. MCP服务器在Snowflake上执行SQL查询
  4. Snowflake返回结果给MCP服务器
  5. MCP服务器格式化并发送结果回MCP客户端

alt text

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

安装

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

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

{
  "mcpServers": {
    "snowflake": {
      "command": "C:\\Users\\YourUsername\\anaconda3\\python.exe",
      "args": ["C:\\Path\\To\\snowflake-mcp\\server.py"]
    }
  }
}

MacOS/Linux:

{
  8"mcpServers": {
    "snowflake": {
      "command": "/usr/bin/python3",
      "args": ["/path/to/snowflake-mcp/server.py"]
    }
  }
}

Snowflake配置

在项目根目录下创建一个.env文件,并添加以下配置:

# Snowflake配置 - 基本信息
SNOWFLAKE_USER=your_username          # 您的Snowflake用户名
SNOWFLAKE_ACCOUNT=YourAccount.Region  # 示例:MyOrg.US-WEST-2
SNOWFLAKE_DATABASE=your_database      # 您的数据库
SNOWFLAKE_WAREHOUSE=your_warehouse    # 您的仓库
SNOWFLAKE_ROLE=your_role              # 您的角色

# 认证 - 选择一种方法

认证选项

此MCP服务器支持两种认证方法:

  1. 密码认证
    SNOWFLAKE_PASSWORD=your_password      # 您的Snowflake密码
    
  2. 密钥对认证
    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客户端通常会根据配置管理服务器的启动和关闭。

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",
        "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",
        //可选
        "-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 - 主入口点,包含MCP服务器实现。
  • SnowflakeConnection - 处理所有Snowflake数据库操作的类,包括:
    • 连接建立和重连
    • 查询执行和事务管理
    • 连接维护和清理
  • SnowflakeMCPServer - 实现MCP协议的主要服务器类:
    • 注册可用工具到MCP框架
    • 处理来自客户端的工具调用请求
    • 管理连接生命周期

连接生命周期

连接生命周期被仔细管理以确保可靠性:

  1. 初始化 - 当收到第一个查询时懒惰地创建连接
  2. 验证 - 在尝试连接之前验证连接参数
  3. 监控 - 定期检查连接的有效性
  4. 恢复 - 如果连接丢失或超时则自动重新连接
  5. 清理 - 当服务器关闭时正确释放资源

MCP工具接口

服务器向MCP客户端暴露以下工具:

  • execute_query - 在Snowflake上执行SQL查询并返回结果
    • 输入:SQL查询字符串
    • 输出:结构化的查询结果
  • export_to_csv - 在Snowflake上执行SQL查询并返回结果
    • 输入:SQL查询字符串
    • 输出:导出的行数。输出文件的文件路径

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

许可证

许可证:MIT

该项目采用MIT许可证。详情见LICENSE文件。

版权所有 © 2025 David Amom